Sie verwenden, um Abfrage zu bündeln, um mehrere verschiedene Arten von Abfragen zusammen zu kombinieren. Sie würden es wie Sie nur verwenden, wenn Sie eine weitere Abfrage wie einen Filter hinzufügen oder nicht usw. zusammen mit Ihrer Terms-Abfrage hinzufügen möchten. Dies wird immer noch funktionieren, aber es wird einfach in eine einfachere Terms-Abfrage umgeschrieben, die mehr Zeit braucht.
Die Begriffe Abfrage ist ausreichend für was Sie tun möchten und es werden alle Dokumente zurückgeben, die entweder Cat1 oder Cat2 in Kategorien enthalten.
So könnte Ihre Abfrage nur wie:
{
"constant_score" : {
"filter" : {
"terms" : { "categories" : ["cat1", "cat2"]}
}
}
}
Sie dieselbe Abfrage innerhalb einem verwenden kann, muss auch abfragen, wenn Sie es mit einer anderen Abfrage kombinieren mögen.
Werfen Sie einen Blick auf this und this als Referenz.
BEARBEITEN: Für den anderen Fall, dh. und Sie könnten die folgende Abfrage verwenden:
"query": {
"bool": {
"should": [
{ "match": { "category": "cat1" }},
{ "match": { "category": "cat2" }}
],
"minimum_should_match": 2
}
}
Sie können alle Arten von Abfragen kombinieren, um je nachdem, was Sie wirklich tun wollen. Die ElasticSearch Query DSL Documnetation ist meiner Meinung nach ziemlich umfangreich, man sollte sich einen Blick darauf werfen. Schauen Sie sich auch this an, es gibt viele verschiedene Möglichkeiten, das zu tun, was Sie wollen. Denken Sie daran, dass die Begriffssuche nach genauen Übereinstimmungen sucht, d. Groß-und Kleinschreibung, während die Match-Abfragen auf analysierten Daten beruhen, so kann das Ergebnis in beiden Fällen unterschiedlich sein.
Die Abfrage 'terms' ist bereits eine ODER-Abfrage. In obigem Beispiel erhalten Sie Dokumente, deren 'category' Feld' cat1' oder 'cat2' enthält. Hast du es ausprobiert? – Val
ok, dann wird das Gegenteil zur Frage, wie mache ich UND die Kategorien, die alle von ihnen verlangen. Ich werde die Frage neu formulieren. – pferrel