执行摘要 - 为什么这个弹性搜索查询...
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"term": {
"document.company_id": 197
}
},
{
"term": {
"change.company_id": 197
}
},
{
"bool": {
"must": [
{
"missing": {
"field": "document.company_id"
}
},
{
"missing": {
"field": "changes.company_id"
}
},
{
"terms": {
"user.id": [
2165, 2976, ...
]
}
}
]
... (closing braces here on)
...返回此记录?
"_source" : {
"date" : "2015-03-27T09:36:41.716+00:00",
"change" : {
"company_id" : 12,
"id" : "CC-12-51"
},
"action" : "change-control-approved",
"description" : "blah blah",
"user" : {
"full_name" : "Martin Wtorkowski",
"email" : "mwtorkowski@getzendoc.com",
"id" : 40
},
"_date" : 1427445401,
"id" : 57879,
"invalid" : null
},
鉴于must
对应AND
且should
对应OR
,...
document.company_id
为197(因此第一个OR术语不适用)change.company_id
为197(其change.company_id
为12 - 因此第二个OR术语也不适用于此。)MUST
(因此AND
)有3个条件:(a)字段document.company_id
必须丢失 - 而且确实缺少(b)字段{{1必须丢失 - 且不缺少(c)字段change.company_id
必须具有一组值中的一个。我可能错过了ES API的一些错综复杂的细节 - 但是由于3个user.id
条件中的第2个失败,因此该记录不应该通过。
我做错了什么?
答案 0 :(得分:1)
在您的第二个missing
过滤器中,有一个拼写错误。
如果您将changes.company_id
修改为change.company_id
,它应该按预期工作。