gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:47:13 35 4
gpt4 key购买 nike

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

{
'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 个元素。

问题是我不知道如何使用 Elastic Search 查询来实现这一点,我不知道这是否可能,或者是否存在另一种方法来执行我想要的操作。

有什么想法吗?

谢谢!

最佳答案

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

最简单(也是最快)的方法是运行三个查询,使用 multi search :

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}
'

根据您的要求,另一种方法可能是使用 limit filter ,但请注意,它限制了每个分片的结果数,而不是每个索引。默认情况下,一个索引有 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 个文档)。

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

关于elasticsearch - 限制 Elastic Search 中 should 子句的结果数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10756435/

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