为什么Elastic Search会返回此记录?

时间:2015-08-24 13:52:49

标签: elasticsearch

执行摘要 - 为什么这个弹性搜索查询...

{
    "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对应ANDshould对应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个失败,因此该记录不应该通过。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

在您的第二个missing过滤器中,有一个拼写错误。

如果您将changes.company_id修改为change.company_id,它应该按预期工作。