小编And*_* L.的帖子

Elasticsearch 中精确匹配和“开头”(前缀)的正确排序

我需要使用 Elasticsearch 改进搜索结果列表。

假设我们有 3 个具有单个字段和内容的文档,如下所示:

  • “苹果”
  • “青苹果”
  • “苹果树”

如果我搜索“apple”,它可能会发生,我得到的结果是这样排序的:

  • “青苹果”
  • “苹果树”
  • “苹果”

但我想要的是具有最高分的精确匹配,这里是带有“apple”的文档。

下一个最高分应该是以搜索词开头的条目,这里是“苹果树”,其余排序默认方式。

所以我想拥有它:

  • “苹果”
  • “苹果树”
  • “青苹果”

我试图通过使用 rescore 来实现它:

curl -X GET "http://localhost:9200/my_index_name/_search?size=10&pretty" -H 'Content-Type: application/json' -d'
{
   "query": {
      "query_string": {
          "query": "apple"
      }
   },
   "rescore": {
      "window_size": 500,
      "query": {
         "score_mode": "multiply",
         "rescore_query": {
            "bool": {
               "should": [
                  {
                     "match": {
                        "my_field1": {
                           "query": "apple",
                           "boost": 4
                        }
                     }
                  },
                  {
                     "match": {
                        "my_field1": {
                           "query": "apple*",
                           "boost": 2
                        }
                     }
                  }
               ]
            }
         }, …
Run Code Online (Sandbox Code Playgroud)

elasticsearch

3
推荐指数
1
解决办法
1889
查看次数

标签 统计

elasticsearch ×1