2017-04-27 2 views
1

Ich mache full text search mit ElasticSearch. Ich verwende Query String Query. Ich mache Suche mit Multi Field Funktion.ElasticSearch: Volltextsuche mit query_string mit mehreren Feldern

Meine Abfrage sieht aus wie folgt:

{ 
    "query": { 
     "query_string": { 
      "fields": [ 
       "field1^5", 
       "field2^5", 
       "field3^1", 
       "field4^1", 
       ................... 
       ................... 
      ], 
      "query": "....", 
      "default_operator": "OR", 
      "analyzer": "standard" 
     } 
    } 
} 

ich mehr als 30 fields in meiner Sammlung haben. Für meine Anforderung muss ich sicherstellen, dass zuerst fieldA, fieldB gesucht werden muss. Daher haben diese Felder higher priority. Andere Felder haben alle low and equal priority.

Also, gibt es einen Weg, wo ich nicht specify all the field names in the query haben muss. Ich möchte nur diejenigen Felder angeben, die eine höhere Priorität haben, d. H. fieldA, fieldB. Die Suche sollte jedoch in allen Feldern basierend auf der Prioritätsreihenfolge durchgeführt werden.

Wie konnte ich das erreichen?

+0

Ihre Frage nicht verstanden. @oblivion –

+0

@DivyeshGausvami Kurz gesagt, ich möchte Volltextsuche auf mehreren Feldern durchführen. Unter diesen Feldern haben zwei von ihnen eine sehr hohe Priorität, und sie müssen zuerst abgeglichen werden. In der Abfrage möchte ich diese zwei Felder nur angeben, indem ich ihnen einen höheren Boost-Wert gebe. Wenn diese beiden Felder nicht mit der Abfrage übereinstimmen, müssen nur andere Felder abgeglichen werden. Also, muss ich immer alle Felder in der Abfrage angeben? Gibt es eine Möglichkeit, wo ich nicht alle Felder niedriger Priorität in der Abfrage auflisten muss? – oblivion

+0

'{ "Abfrage": { "multi_match": { "Abfrage": "Suche string", "Felder": [ "Feld1", "Feld2", ..., "fieldN"] } } } ' Dies könnte für Sie hilfreich sein? habe ich recht ? –

Antwort

2

Versuchen Sie es mit diesem. Getestet in meinem System, funktioniert es für mich: -

{ 
    "query": { 
     "query_string": { 
      "fields": [ 
       "field1^5", 
       "field2^5", 
       "_all", 
      ], 
      "query": "....", 
      "default_operator": "OR", 
      "analyzer": "standard" 
     } 
    } 
} 
+1

Es funktioniert. Danke vielmals !! Eine weitere Sache, die ich fragen möchte ist, dass ich auch '_all' eine Priorität zuweisen muss, wie zum Beispiel: '" _all^1 "'? – oblivion

+1

Keine Notwendigkeit. Laut elastic search doc - "boost - Setzt den Boost-Wert der Abfrage. Standardwerte auf 1.0." https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html –

+0

Okay. Vielen Dank :) – oblivion

Verwandte Themen