gpt4 book ai didi

elasticsearch - ElasticSearch根据查询对结果中的字段进行排序

转载 作者:行者123 更新时间:2023-12-03 02:31:30 24 4
gpt4 key购买 nike

我有一个像这样的ElasticSearch数据模型:

  {
"_index": "index_name",
"_type": "_doc",
"_id": "26177",
"_score": 1.0,
"_source": {
"primary_name": "Megatron Industries",
"some_value": "",
"search_names": [
"Optimus",
"Prime",
"Lorem"
]
}
},

目前,我正在执行这样的查询:
{
"query": {
"query_string" : {
"query" : "lorem",
"fields" : ["search_names"]
}
}
}

所以我要根据search_names中的值查询文档。

在网站上,如果有人搜索名称为“lorem”的记录,我将返回此记录,显示其“主要名称”,然后返回其搜索名称标记为“也称为”的列表。

我的问题是,这些记录中的一小部分具有1000多个“search_names”,因此我将不得不限制显示的“search_names”的数量,但我想确保最接近其查询的“search_name”为显示在“也称为”顶部。

为了明确起见,我对搜索结果的顺序感到满意,但是我希望根据查询对搜索结果中字段之一的值进行排序。

这是我在ElasticSearch中可以做的事情吗?

作为次要目标,排序之后,我能用什么方法将在search_names字段中返回的结果数限制为10,但还要提供另一个包含总数作为数字的字段?

这样便可以在搜索结果中显示:
  • 原始名称:威震天工业
  • 也称为:Optimus,prim,...和990个其他名称。

  • 谢谢,

    最佳答案

    事实证明,解决方案非常简单。
    我只需要在search_names字段中添加一个突出显示。 ElasticSearch将根据查询匹配项自动对字段进行排序并突出显示该字段。
    我可以通过在突出显示部分设置number_of_fragments来限制结果。
    然后我只是从结果中排除了原始字段。
    在下面查询。

    {
    "_source": {
    "excludes": [ "search_names" ]
    },
    "query": {
    "query_string" : {
    "query" : "Lorem ipsum",
    "fields" : ["search_names"]
    }
    },
    "highlight": {
    "fields": {
    "search_names": {
    "fragment_size" : 1000,
    "no_match_size" : 1000,
    "number_of_fragments" : 10,
    "pre_tags" : ["<b>"],
    "post_tags" : ["</b>"]
    }
    }
    }
    }

    关于elasticsearch - ElasticSearch根据查询对结果中的字段进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59888943/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com