Ich möchte die elastische Suche verwenden, um durch eine große Adressdatenbank zu suchen, und um es wie einige andere Anwendungen zu machen, beginne ich mit der Postleitzahl zuerst, die großartig ist, um den Rest der Suchabfrage einzugrenzen.
Also mit Suche :: Elasticsearch
Ich mache
%Vor% Aber das spuckt einfach alles für $postcode
aus und unabhängig davon, was $keyword
ist, wird die Ergebnismenge nicht weiter reduziert.
Ich muss $postcode
als zwingende Bedingung haben, aber auch separat und zusätzlich die beiden anderen Felder, die ebenfalls als Volltextsuche berücksichtigt werden.
Wie soll ich das machen? (Ich schaue mir die Docs an und interpretiere vielleicht json- & gt; perl-Hashrefs falsch, also sind irgendwelche Vorschläge willkommen)
Für ein hypothetisches Beispiel:
Der Benutzer gibt NW1 4AQ
ein. Die obige Abfrage kehrt sofort zurück, sagen wir Albany Street und Portland Street. Wenn der Benutzer Portland
und diese Postleitzahl abfragt, erwarte ich nur Portland Straße, um das Ergebnis zu sein. Gerade jetzt mit dem obigen Es wird nur beide Einträge zurück.
Elastisches Dokument sagt:
" Standardmäßig ist keine der cannels-Klauseln erforderlich, um zu entsprechen, mit einer Ausnahme: Wenn keine Muss -Klauseln vorhanden sind, muss mindestens eine should-Klausel übereinstimmen Genauso wie wir die Genauigkeit der Übereinstimmungsabfrage steuern können, können wir steuern, wie viele Klauseln übereinstimmen müssen, indem Sie den Parameter
" verwendenminimum_should_match
entweder als absolute Zahl oder als Prozentsatz "
Der Weg dazu ist minimum_should_match
. So wie du es getan hast. Was Sie getan haben, bedeutet, dass entweder Adresse oder Name übereinstimmen muss.
Tags und Links perl elasticsearch