2017-12-28 8 views
0

I Indexpositionen in Elasticsearch in jedem Punkt, wo hat diese Eigenschaften:Querying Elasticsearch mit Array von Werten

tags - array of strings eg. [ 'c++', 'java', 'python' ] 
submitter_id - uuid 
id - uuid 

Auch ich habe Benutzer, der diese Eigenschaften hat:

tags - array of strings 
following_ids - array of uuids 

Was ich tun möchte ist query elasticsearch für Elemente, bei denen Tags mit Tags des Benutzers übereinstimmen oder submission_id ist eines der folgenden Elemente des Benutzers, auch i boost-Felder. Gerade jetzt i bilden die Abfrage wie diese

"should"=>[{"match"=>{"tags"=>{"query"=>"yoga", "boost"=>3}}}, {"match"=>{"tags"=>{"query"=>"yogic technique", "boost"=>3}}}, 
{"match"=>{"tags"=>{"query"=>"lag jaa gale", "boost"=>3}}}, {"match"=>{"tags"=>{"query"=>"jonita gandhiband", "boost"=>3}}} 
{"match"=>{"submitter_id"=>"fc8b720f-a306-4849-8bc1-38fafae7c92b"}}, 
{"match"=>{"submitter_id"=>"c35ec42f-2df0-4870-89a4-9e59c9df04ea"}}] 

Aber wenn der Benutzer eine Menge von Tags oder following_ids hat, ich würde bald in maximal Klauseln Limit laufen. Wie soll ich damit umgehen?

Antwort

0

Da Sie nach den genauen IDs und Tags suchen, sollten Sie die Terms Query trotzdem verwenden, aber der zusätzliche Vorteil für Sie in diesem Fall ist, dass Sie mehrere Begriffe geben können, so dass Sie nur 1 Klausel für alle Ihre benötigen würden Tags und 1 für Ihre Benutzer-IDs.