我的過濾器分組在一起分類。 我想檢索文檔,其中文檔可以匹配任何類別中的任何篩選器,但如果設置了兩個(或更多)類別,則文檔必須與所有類別中的任何篩選器匹配。如何在ElasticSearch中嵌套AND和OR過濾器?
如果用僞SQL將是:
SELECT * FROM Documents WHERE (CategoryA = 'A') AND (CategoryB = 'B' OR CategoryB = 'C')
我已經試過像這樣的嵌套過濾器:
{
"sort": [{
"orderDate": "desc"
}],
"size": 25,
"query": {
"match_all": {}
},
"filter": {
"and": [{
"nested": {
"path":"hits._source",
"filter": {
"or": [{
"term": {
"progress": "incomplete"
}
}, {
"term": {
"progress": "completed"
}
}]
}
}
}, {
"nested": {
"path":"hits._source",
"filter": {
"or": [{
"term": {
"paid": "yes"
}
}, {
"term": {
"paid": "no"
}
}]
}
}
}]
}
}
但顯然我不太明白ES語法。這是正確的軌道還是我需要使用另一個過濾器?
沒有答案過濾這個問題:''或''''term''可以通過[terms]更容易完成(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms- filter.html)。而[bool](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html)的默認值是''和''。 「filter.bool.must:[{terms:progress:[」incomplete「,」complete「]}}。 {terms:paid:[「yes」,「no」]}]''可能會工作嗎? – cfrick
嵌套查詢/過濾器用於數組/列表(取決於您熟悉的語言,例如'a = [{'b':1},{'c':2}])''。你能寫一個你的文件的例子嗎?這將有助於 – Diolor
cfrick帶領我走上正確的道路。我在「和」過濾器中嵌入了一堆「條款」過濾器,它似乎滿足我的需求。 – MHTri