gpt4 book ai didi

php - Elasticsearch-使用Bool(MUST&AND)DSL查询创建报告过滤器

转载 作者:行者123 更新时间:2023-12-03 01:08:43 25 4
gpt4 key购买 nike

我正在尝试创建一些报告过滤器,用户可以在其中使用报告上的任何字段搜索配置文件。例如:搜索以firstname开头的ann和以grade开头的vi等任何配置文件。

这是我到目前为止编写的查询:

{
from: 20,
size: 20,
query: {
filtered: {
query: {
match_all: [ ]
},
filter: {
bool: {
must: [
{
prefix: {
firstname: "ann"
}
},
{
prefix: {
grade: "vi"
}
}
]
}
}
}
},
sort: {
grade: {
order: "asc"
}
}
}

如果我删除了 must的一个子项(在 bool过滤器中),则可以正常工作。但是,一旦我使用多个过滤器,并且其中需要使用任意数量的条目,它就不会返回任何结果。

另外,如果我使用 should而不是 must,它也可以工作。我不确定自己是否误解了逻辑,但据我所知(在这种情况下), must仅应返回以 firstname开头的 ann和以 grade开头的 vi的结果。

它们确实存在,但是此查询只是找不到它们。

我在这里想念什么吗?

谢谢

最佳答案

既然如此,我还不能发表评论。我在回答一些假设。

首先,我使用的是ES 0.90.2 version,您的查询对我的输入来说效果很好。但是,取决于您的输入大小和执行查询的平台,我的答案可能不是正确的答案。

假设:索引中的数据数小于20。

我在索引中添加了以下输入:

'{"name": "ann", "grade": "vi"}'
'{"name": "ann", "grade": "ii"}'
'{"name": "johan", "grade": "vi"}'
'{"name": "johan", "grade": "ii"}'

我的测试查询与您的测试查询相同,结果如下:
"hits" : {
"total" : 2,
"max_score" : null,
"hits" : [ ] // <-- see this part is blank
}

如您所见,它没有列出匹配,但是有两个匹配。那是因为 from:20代码段。如果更改该值,则可以看到一些结果。如果要查看所有结果,只需删除该部分。

注意:如果不是这种情况,很抱歉:(

关于php - Elasticsearch-使用Bool(MUST&AND)DSL查询创建报告过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17877954/

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