Elastische Suche: Verwenden Sie Filter und sollte Boole Query

8

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.

    
Recct 14.06.2016, 16:09
quelle

2 Antworten

2

Nach dem gesunden Menschenverstand habe ich festgestellt, dass Folgendes für das bool -Segment gilt:

%Vor%

Wenn minimum_should_match auf 1 gesetzt ist (was eher ein Zähler als wahr / falsch ist), fühlt es sich so an, als würde ein OR in diese should s eingefügt werden

    
Recct 15.06.2016, 10:57
quelle
1

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 minimum_should_match entweder als absolute Zahl oder als Prozentsatz "

" verwenden

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.

    
israelst 15.06.2016 11:19
quelle

Tags und Links