Sie können Ihr erwartetes Ergebnis erhalten, indem Sie den folgenden Befehl ausführen. Diese Befehle fügen ein zusätzliches .keyword
mit Ihrem Befehl in Feld city
hinzu.
curl -XGET 'localhost:9200/bank/_search?pretty' -H 'Content-Type: application/json' -d'{"query": {"wildcard": {"city.keyword": "R*d"} }, "_source": ["city"]}'
Grund des Hinzufügens .keyword
Wenn Sie Daten einfügen, um Elasticsearch, werden Sie ein .keyword
Feld bemerken und das Feld ist not_analyzed
. Standardmäßig wird das Feld, in das Sie Daten eingefügt haben, standardmäßig analysiert, und es gibt ein Multifeld .keyword
. Wenn Sie ein Feld city
mit Daten erstellen, wird ein Feld city
mit Standardanalysator erstellt und ein Multifeld .keyword
hinzugefügt, das not_analyzed
ist.
In Ihrem Fall benötigen Sie ein not_analyzed
Feld zur Abfrage (wie wildcard
Abfrage). Ihre Abfrage sollte also auf city.keyword
Feld sein, das standardmäßig nicht analysis ist.
Im ersten Fall haben Sie eine Get-Anforderung an elasticsearch
mit Abfrageparameter getroffen. Elasticsearch konvertiert die Abfrage automatisch als zweites Format.
Für eine zuverlässige Quelle, können Sie die Official docs
Das string
Feld in zwei neue Arten aufgespalten hat folgen: text
, die für Volltextsuche verwendet werden soll, und keyword
, die verwendet werden sollte, Stichwortsuche.
Um die Dinge besser zu machen, Elasticsearch
beschlossen, eine Idee zu borgen, dass zunächst von Logstash
stammten: Strings werden nun sowohl als text
und keyword
standardmäßig zugeordnet werden. die folgenden einfachen Dokument Zum Beispiel, wenn Sie Index:
{
"foo": "bar"
}
Dann werden die folgenden dynamischen Zuordnungen werden erstellt:
{
"foo": {
"type" "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
Als Folge wird es sowohl möglich sein, Volltextsuche auf foo und Stichwortsuche und Aggregationen mit der foo.keyword
durchzuführen Feld.
Hat meine Antwort Ihnen nicht geholfen? – sunkuet02
@ sunkuet02 Es ist hilfreich, danke! Dies macht jedoch die beiden Suchmethoden (intuitiv) inkonsistent. Weißt du, ob ich irgendetwas mit der Datenbank machen kann, so dass beide Methoden nicht das "Schlüsselwort" benötigen, oder beide das "Schlüsselwort" benötigen? – Luke
Ich habe meine Antwort aktualisiert. Bitte überprüfen Sie es, hoffe es hilft. Und vergessen Sie nicht, meine Antwort zu verbessern und zu akzeptieren, es hilft. – sunkuet02