2016-05-26 15 views
0

In Sphinx möchte ich nach einer Phrase in Komma getrennt Zeichenfolge suchen.Sphinx - Suchausdruck in Kommatrennzeichen

Zum Beispiel ist die durch Kommas getrennte Zeichenfolge Very Expensive,Luxury,Romance,Trendy.

Der Ausdruck "Expensive" sollte nicht mit diesem Datensatz übereinstimmen, aber der Ausdruck "Very Expensive" sollte übereinstimmen.

Versucht Einstellung Phrase Boundary Option in Sphinx-Konfigurationsdatei und drehte den Indexer erneut, aber es gibt keine Änderung in der Ausgabe.

phrase_boundary     = U+002C# comma 
phrase_boundary_step   = 100 

Ich verwende Sphinx 2.0.5 mit PHP als Skriptsprache.

Antwort

1

Wie löse ich passen, (Indizierung Schlagwörter) ist zu Verwenden Sie einen speziellen Separator. ZB Index als

_SEP_ Very Expensive _SEP_ Luxury _SEP_ Romance _SEP_ Trendy _SEP_ 

Jetzt eine Abfrage "_SEP_ Very Expensive _SEP_" (mit Anführungszeichen) ausführen können, und es wird eine Abfrage "_SEP_ Expensive _SEP_" wird nicht überein :)


(kann diese bauen dynamisch schön, aber passen in sql_query zB

... , CONCAT('_SEP_ ',REPLACE(labels,',',' _SEP_ '),' _SEP_') AS labels, ... 

(zumindest für eine mysql Datenquelle)

+0

Danke Barry. Das hat wie ein Zauber funktioniert. – Samir

0

Sie könnten die Verwendung der field-start und field-end Modifikatoren machen den Extended query syntax verwenden. In diesem Fall müssten Sie Ihre kommagetrennten Zeichenfolgen ("Sehr teuer", "Luxus" usw.) während der Indizierung in die einzelnen Felder aufteilen.

Ihre Suchanfragen würden dann wie diese aussehen:

^Very Expensive$ - passt das gesamte Feld

^Expensive$ - das gesamte Feld nicht diese