2017-05-12 3 views
0

Neu bei ElasticSearch - fangen Sie an, es zu lieben. Ich arbeite an einer Rails-Anwendung (mit elasticsearch-rails/elasticsearch-model).Wie Sie zwei verschiedene Felder mit unterschiedlichen Abfragebegriffen in derselben Anfrage abfragen. ElasticSearch 5.x

Ich habe zwei Felder - beide Zeichenfolgen bestehen aus Tags.

ABOUT_ME & about_you

  • Nun war ich mit den aktuellen Benutzer ABOUT_ME die about_you eines anderen Benutzers abfragen.
  • Gleichzeitig möchte ich about_me der anderen Benutzer mit dem about_you des aktuellen Benutzers abfragen.

Macht das Sinn? Wie zwei Felder sind zwei Abfragen und jede Abfrage auf ein bestimmtes Feld ausgerichtet.

Ich brauche nur einen Hinweis, wie dies in ES erreicht werden kann. Aus Gründen der Vollständigkeit, hier ist der Teil Methode, die ich in meinem Schienen-Modell erstellt - es ist unvollständig:

def home_search(query_you, query_me) 
    search_definition = 
     { 
      query: { 
       multi_match: { 
        query: query_me, 
        fields: ['about_you'] 
       } 
       ..... SOMETHINGs MISSING HERE ..... ? 
      }, 
      suggest: { 
       text: query, 
       about_me: { 
        term: { 
         size: 1, 
         field: :about_me 
        } 
       }, 
       about_you: { 
        term: { 
         size: 1, 
         field: :about_you 
        } 
       } 
      } 
     } 
    self.class.__elasticsearch__.search(search_definition) 
end 

Jede Hilfe, Link oder Spenden sind willkommen. Vielen Dank!

Antwort

1

Ich bin mir nicht sicher, ob ich Ihre Frage verstanden habe, aber ich kann zwei Möglichkeiten vorschlagen:
die erste Verwendung ein bool query vom Typ should und minimum_should_match=1. In diesem Fall können Sie zwei Abfragen für Ihre Suche schreiben. und Wenn Sie zwischen den Ergebnissen unterscheiden möchten, können Sie in jeder Abfrage einen Parameter _name übergeben. so etwas wie diese:

{ 
    "query": { 
     "bool": { 
     "minimum_should_match": 1, 
     "should": [ 
      { 
       "multi_match": { 
        "query": "query_me", 
        "fields": [ 
        "about_you" 
        ], 
        "_name": "about_you" 
       } 
      }, 
      { 
       "multi_match": { 
        "query": "query_you", 
        "fields": [ 
        "about_me" 
        ], 
        "_name": "about_you" 
       } 
      } 
     ] 
     } 
    } 
} 

von _name Bereitstellung können Sie sehen, welche Abfragen in seinem Suchergebnis hitted werden. Der zweite Ansatz könnte eine Abfrage sein, in der Sie mehrere Abfragen an den Endpunkt übergeben und die Ergebnisse zurück erhalten können. Hier sind einige nützliche Links:

Bool Query
Named Queries

+1

Genau das, was ich suchte. Ja, ich habe letzte Nacht auf Bool-Anfragen gelesen. Viel Spaß beim Einlassen - aber ich habe mir versprochen diese Woche zu meistern! Vielen Dank für Ihre Anregungen - sehr hilfreich! –

Verwandte Themen