簡體   English   中英

在Elasticsearch中將過濾器和查詢whitin嵌套文檔組合

[英]Combining filter and query whitin nested document in elasticsearch

我正在將Elasticsearch集成到我們正在構建的應用程序中。 我遇到嵌套查詢和過濾器的麻煩。 這是我們映射的示例:

"index": {
    "mappings": {
        "users": {
            "properties": {
                "membership": {
                    "type": "nested",
                    "properties": {
                        "membership": {
                            "type": "string"
                        },
                        "start date": {
                            "type": "date"
                        },
                        "end date date": {
                            "type": "date"
                        }
                    }
                }
            }
        }
    }
}

現在,我想查找所有具有“成員身份”,“ foo bar”且沒有結束日期的用戶。 問題是,當我使用標准分析器時,“ foo bar”在索引中分為兩個詞,因此我不能使用術語過濾器來查找“ foo bar”。 我們可以使用其他分析器解決此問題,但這還有其他缺點,例如大寫/小寫問題等。

此外:通過使用查詢而不是過濾器來查找具有“ foo bar”成員身份的每個人非常容易。 問題在於,沒有查詢可找到“結束日期” =缺少的嵌套文檔。 為此有一個過濾器,但是我似乎無法在同一嵌套文檔中將查詢“ membership” =“ foo bar”與過濾器“ end date” = missing組合在一起。

因此,我可以找到每個“結束日期” =丟失的人,並且可以找到每個成員都具有“ foo bar”的成員,但不是每個沒有結束日期的成員都是“ foo bar”的成員。

是否有解決此問題的建議?

這似乎做到了:

POST /test_index/_search
{
   "query": {
      "nested": {
         "path": "membership",
         "query": {
            "bool": {
               "must": [
                  {
                     "match": {
                        "membership.membership": {
                           "query": "foo bar",
                           "operator": "and"
                        }
                     }
                  },
                  {
                     "filtered": {
                        "filter": {
                           "not": {
                              "filter": {
                                 "exists": {
                                    "field": "membership.end_date"
                                 }
                              }
                           }
                        }
                     }
                  }
               ]
            }
         }
      }
   }
}

這是我用來設置它的代碼(ES 1.5.1):

http://sense.qbox.io/gist/20a12a71178f0aac4369f52ab0c4c811ba803122

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM