限制Elastic Search中should子句的结果数量

2024-01-02

我正在编写一个查询来获取与多个短语之一匹配的结果,例如

{
  'size': 10,
  'from': 0,

  'query': {
    'bool': {
      'should': [
        {'text': {'title': { 'query': 'some words' }}},
        {'text': {'title': { 'query': 'other words' }}},
        {'text': {'title': { 'query': 'some other words' }}},
      ]
    }
  }
}

它按预期工作,但我有一个问题:10 个评分结果都匹配同一个短语。

我想到的解决方案是限制每个结果的数量should例如,从句到 5 个元素。

问题是我不知道如何使用弹性搜索查询来实现这一点,并且我不知道是否可能,或者是否存在另一种方法来完成我想要的事情。

有任何想法吗 ?

Thanks !


当您尝试实现 3 个查询的并集时,ElasticSearch 正在寻找与您的查询匹配的“最相关”文档。

最简单(也是最快)的方法是运行三个查询,使用多重搜索 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html:

curl -XGET 'http://127.0.0.1:9200/my_index/_msearch?pretty=1'  -d '
{}
{"query" : {"text" : {"title" : "some words"}}, "size" : 5}
{}
{"query" : {"text" : {"title" : "some other words"}}, "size" : 5}
{}
{"query" : {"text" : {"title" : "other words"}}, "size" : 5}
'

根据您的要求,另一种选择可能是使用限制过滤器 http://www.elasticsearch.org/guide/reference/query-dsl/limit-filter.html,但请注意,它限制每个分片的结果数量,而不是每个索引。默认情况下,索引有 5 个主分片,因此如果您指定限制为 5,则很可能会返回 25 个结果。

所以也许是这样的:

curl -XGET 'http://127.0.0.1:9200/_all/_search?pretty=1'  -d '
{
   "query" : {
      "bool" : {
         "should" : [
            {
               "filtered" : {
                  "filter" : {
                     "limit" : {
                        "value" : 1
                     }
                  },
                  "query" : {
                     "text" : {
                        "title" : "some words"
                     }
                  }
               }
            },
            {
               "filtered" : {
                  "filter" : {
                     "limit" : {
                        "value" : 1
                     }
                  },
                  "query" : {
                     "text" : {
                        "title" : "other words"
                     }
                  }
               }
            },
            {
               "filtered" : {
                  "filter" : {
                     "limit" : {
                        "value" : 1
                     }
                  },
                  "query" : {
                     "text" : {
                        "title" : "some other words"
                     }
                  }
               }
            }
         ]
      }
   }
}
'

这将为您提供每个分片上每个短语的最高得分文档(有 5 个分片,最多 15 个文档,其中(因为您没有指定size=15) 将减少到前 10 个文档)。

您的里程可能会有所不同,具体取决于您的文档在分片中的分布方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

限制Elastic Search中should子句的结果数量 的相关文章

随机推荐