让我们说我想对这两个索引进行全局搜索:主题,用户。
这两个索引包含以下字段:
用户:[first_name] 主题:[title,description,is_public]
我现在正在使用此查询:
{"query":
{"bool":
{"should":[
{"wildcard": {"first_name": "*usicTerm"}},
{"wildcard": {"title": "*usicTerm"}},
]},
"index": ["users", "themes"]
},
"from":0,"size":10,"sort":[]
}
现在有了这个,我想通过名为" is_public"的特定主题字段过滤所有主题结果,所以我尝试了:
{"query":
{"bool":
{"should":[
{"wildcard": {"first_name": "*usicTerm"}},
{"wildcard": {"title": "*usicTerm"}}
]},
{"must": [
{"term": {"is_public": true}}
]}
"index": ["users", "themes"]
},
"from":0,"size":10,"sort":[]
}
但这并不起作用,因为它也过滤掉所有用户没有字段的索引结果" is_public"为真,因为这个指数甚至没有这个字段!
所以任何人都可以告诉我如何应用这个"必须"条款只适用于我的主题"指数?
谢谢:)
大卫。
答案 0 :(得分:1)
如果is_public始终存在(因此它是false或true,永远不会从文档中丢失),您可以尝试以下方法:
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"missing": {
"field": "is_public"
}
},
{
"term": {
"is_public": "true"
}
}
]
}
}
}
}
}
ES 2.0中的过滤器发生了变化,因此可能看起来会有所不同,具体取决于您使用的ES版本。