[英]Combining missing and term query in nested document in Elasticsearch
[英]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.