Hier ist die offizielle Website von elasticsearch zu Begriffen: https://www.elastic.co /guide/de/elasticsearch/reference/2.1/query-dsl-terms-query.html

Wie wir sehen können, sollten wir den folgenden Befehl verwenden, wenn wir eine Abfrage des Suchmechanismus für Begriffe durchführen möchten:

curl -XGET localhost:9200/tweets/_search -d '{
  "query" : {
    "terms" : {
      "user" : {
        "index" : "users",
        "type" : "user",
        "id" : "2",
        "path" : "followers"
      }
    }
  }
}'

Aber was ist, wenn ich eine Abfrage durch ein anderes Benutzerfeld durchführen möchte? Angenommen, Benutzer haben einige andere Felder wie Name und kann ich den Suchmechanismus für Begriffe verwenden, um die Tweets zu finden, indem ich den Benutzernamen, aber nicht die ID gebe. Ich habe versucht, Befehl wie diesen zu verwenden:

curl -XGET localhost:9200/tweets/_search -d '{
  "query" : {
    "terms" : {
      "user" : {
        "index" : "users",
        "type" : "user",
        "name" : "Jane",
        "path" : "followers"
      }
    }
  }
}'  

Aber es tritt ein Fehler auf. Ich freue mich auf Ihre Hilfe. Vielen Dank!

3
iurti 5 Jän. 2016 im 06:55

2 Antworten

Beste Antwort

Der Begriffssuchmechanismus ist im Grunde eine integrierte Optimierung, um nicht zwei Abfragen durchführen zu müssen, um zwei Indizes zu verbinden, d. H. Eine in Index A, um die IDs zum Nachschlagen zu bringen, und eine zweite, um die Dokumente mit diesen IDs in Index B abzurufen.

Im Gegensatz zu SQL kann ein solches JOIN nur im Feld id ausgeführt werden, da dies die einzige Möglichkeit ist, ein Dokument über einen GET-Aufruf eindeutig aus Elasticsearch abzurufen. Genau das wird Elasticsearch in {{X1} tun } Nachsehen.

Um Ihre Frage zu beantworten, funktioniert der Suchmechanismus für Begriffe in keinem anderen Feld als dem Feld id, da das erste abzurufende Dokument eindeutig sein muss. In Ihrem Fall würde ES nicht wissen, wie das Dokument für den Benutzer mit name Jane abgerufen werden soll, da name nur ein Feld im Benutzerdokument ist, aber in keiner Weise eine eindeutige Kennung für Benutzer Jane.

5
Val 5 Jän. 2016 im 04:43

Ich denke, Sie haben nicht genau verstanden, wie das funktioniert. Die Suchabfrage für Begriffe funktioniert durch Lesen von Werten aus einem Feld eines Dokuments mit der angegebenen ID. In diesem Fall versuchen Sie, den Wert des Felds user im Index tweets mit den Werten des Felds followers im Dokument mit der in users vorhandenen ID "2" abzugleichen. Index und Typ user.

Wenn Sie aus einem anderen Feld lesen möchten, erwähnen Sie dies einfach in "path".

Was Sie hauptsächlich verstehen müssen, ist, dass die Suchwerte alle aus einem Feld eines einzelnen Dokuments und nicht mehrerer Dokumente abgerufen werden.

4
bittusarkar 5 Jän. 2016 im 04:27