2009-04-15 6 views
5

Ich benutze Sphinx mit dem Thinking Sphinx Plugin. Ich habe ein Modell namens Ort mit dem folgenden Code indiziert (und der Rake thinking_sphinx: index-Befehl)Sphinx gibt schlechte Suchergebnisse zurück

define_index do 
    indexes :name 
    indexes city 
    indexes zip 
end 

ich erhalten die Ergebnisse in meinem Controller mit diesem Code:

@venues = Venue.search params[:search] 

und ich machen sie als Json. Das Problem, das ich habe, ist, dass, wenn ich diese URL treffe:

Ich bekomme nichts. Aber wenn ich diese URL treffe:

http://localhost:3000/venue/list?search=Baltimor 

Ich bekomme alle Locations in der Stadt Baltimore. Aus irgendeinem Grund macht ein Charakter einen Unterschied. Theoretisch sollte ich alle Orte in Baltimore bekommen, wenn ich nur mit einem Zeichen suche - 'b'

Weiß jemand, was hier vor sich geht?

Danke

Antwort

6

Sofern Sie enable_star auf 1 gesetzt und min_prefix_len oder min_infix_len auf 1 oder mehr haben, werden Sie nicht B Baltimore übereinstimmen bekommen (und selbst dann, ich glaube, Sie für B suchen müssen * um das Spiel zu bekommen).

Was geschieht hier ist, dass standardmäßig Denken Sphinx sagt ein englisches stemmer, zu verwenden, die für ähnliche Worte erlaubt (von Zeichen, nicht von Bedeutung) als Übereinstimmungen, so dass es setzt Baltimor und Baltimore im selben Korb.

Wenn Sie einen Teil eines Wortes angepasst bekommen wollen, dann müssen Sie so etwas wie die folgenden in config/sphinx.yml setzen:

development: 
    enable_star: 1 
    min_infix_len: 1 
test: 
    enable_star: 1 
    min_infix_len: 1 
production 
    enable_star: 1 
    min_infix_len: 1 

Dann Sphinx stoppen, neu indizieren, und starten Sie Sphinx . Sobald Sie das getan haben, sollte die Suche nach B * Baltimore zurückgeben.

Hoffe, das hilft.

+0

süß, gerade gefunden, dass auf der Sphinx-Dokumentation ... aber konnte nicht finden, wo es gesagt wurde, dass in den Yml zu setzen. Danke! – Tony

+0

Gibt es eine Möglichkeit, wo sie am Ende kein * eingeben müssen? Wie Suche Holz würde Holz und Holzbearbeitung hochziehen, ohne Holz zu tippen * – Mike

+0

Große Antwort. Für jeden, der hier stolpert, finden sich Details unter http://freelancing-god.github.com/ts/en/advanced_config.html. Eine Sache zu beachten ist, dass die Einstellung von min_infix_len auf 1 wahrscheinlich die Leistung verringert. – dmonopoly