Meine Filter sind in Kategorien zusammengefasst. Ich möchte Dokumente abrufen, in denen ein Dokument mit einem Filter in einer Kategorie übereinstimmen kann. Wenn jedoch zwei (oder mehr) Kategorien festgelegt sind, muss das Dokument mit allen Filtern in ALLEN Kategorien übereinstimmen.Wie verschachtelte AND- und OR-Filter in ElasticSearch?
Wenn in pseudo-SQL geschrieben wäre es:
SELECT * FROM Documents WHERE (CategoryA = 'A') AND (CategoryB = 'B' OR CategoryB = 'C')
I Verschachtelte Filter wie so versucht haben:
{
"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"
}
}]
}
}
}]
}
}
aber offenbar noch recht ich nicht die ES-Syntax verstehen. Ist das auf dem richtigen Weg oder muss ich einen anderen Filter verwenden?
nicht die Antwort im Zusammenhang auf die Frage: '' '' '' '' mit '' term'' kann mit [terms] einfacher gemacht werden (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms- filter.html). und der Standard für [bool] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html) ist '' and''. etwas an '' filter.bool.must: [{terms: progress: ["incomplete", "complete"]}. {Begriffe: bezahlt: ["ja", "nein"]}] "könnte funktionieren? – cfrick
verschachtelte Abfragen/Filter werden für Arrays/Listen verwendet (abhängig davon, mit welcher Sprache Sie vertraut sind, z. B. 'a = [{'b': 1}, {'c': 2}])' '. Könnten Sie ein Beispiel für eines Ihrer Dokumente schreiben? Das würde helfen – Diolor
cfrick hat mich auf den richtigen Weg gebracht. Ich habe eine Reihe von "Terms" -Filtern in einem "und" Filter verschachtelt, und es scheint meine Bedürfnisse zu erfüllen. – MHTri