我很难弄清楚为什么这两个查询不能返回相同数量的结果(我使用的是Elasticsearch 2.4.1):
{
"nested": {
"path": "details",
"filter": [
{ "match": { "details.id": "color" } },
{ "match": { "details.value_str": "red" } }
]
}
}
{
"nested": {
"path": "details",
"filter": {
"bool": {
"must": [
{ "match": { "details.id": "color" } },
{ "match": { "details.value_str": "red" } }
]
}
}
}
}
第一个查询有更多结果。
我的猜测是,第一个查询中的filter
子句的工作方式类似于or
/ should
,但是如果我将第二个查询中的must
替换为should
,查询产生的结果数量要多于这两个查询。
这些查询的含义有何不同?
恐怕我对索引文件的结构一无所知;我所知道的是每个查询返回多少行。
答案 0 :(得分:2)
第一个查询是错误的,嵌套的filter
不能是数组,因此我怀疑ES无法正确解析它,并且只匹配了一个而不是两个匹配,这可能就是为什么它返回比第二个。
第二个查询在嵌套过滤器方面是正确的,并且可以产生您期望的结果。