2017-12-19 1 views
-1

Ich habe Dokumente wie folgt aus:Wie so Abfrage in Elasticsearch

{ 
'body': '', 
'date': '', 
'agency_id': '' 
} 

Ich möchte mit diesen Bedingungen Dokumente erhalten:

Körper enthält:

all of ['word1', 'word2 word3', 'word4'] 
Or all of: ['word5 word6', 'word7'] 
or all of: ['word8 word9', 'word10'] 
And agency_id in ['id1', 'id2', 'id3'] 

Möchten Sie Bitte sagen Sie mir, wie Sie diese Abfrage erstellen?

Antwort

0

Um das zu erreichen, was Sie wollen, müssen Klauseln verwenden, um zwei muss, eine für body und andere für agency_id.

{ 
    "size" : 10, 
    "query" : { 
    "function_score" : { 
     "query" : { 
     "bool" : { 
      "must" : { 
      "bool" : { 
       "should" : [ { 
       "query_string" : { 
        "query" : "word1 worrd2 word3 word4", 
        "fields" : [ "body" ], 
        "default_operator" : "and" 
       } 
       }, { 
       "query_string" : { 
        "query" : "word5 worrd6 word7", 
        "fields" : [ "body" ], 
        "default_operator" : "and" 
       } 
       }, { 
       "query_string" : { 
        "query" : "word8 worrd9 word10", 
        "fields" : [ "body" ], 
        "default_operator" : "and" 
       } 
       } ], 
       "minimum_should_match" : "1" 
      } 
      }, 
      "must" : { 
      "query": { 
       "terms" : { "agency_id" : [ "id1", "id2", "id3" ]} 
      } 
      } 
     } 
     } 
    } 
    } 
} 

So stellen Sie sicher, dass Sie verwenden, um einige Analysator Token innerhalb body für jedes Wort zu generieren: so etwas wie dies sollte im Falle von body können Sie Ihre drei Bedingungen angeben und mindestens verwenden sollten als 1. entsprechen. Wenn Sie keine spezielle Funktion benötigen, können Sie einfach Standard Analysator verwenden.

+0

word2 und word3 müssen als ein Wort und natürlich word8 word9 betrachtet werden. Was kann man dafür tun? –

+0

Können Sie ein Beispiel für Inhalt im Körper hinzufügen? –