2009-04-15 10 views
5

私は思考型スフィンクスプラグインでスフィンクスを使用しています。 (:インデックスコマンドとすくいthinking_sphinx)スフィンクスが悪い検索結果を返す

define_index do 
    indexes :name 
    indexes city 
    indexes zip 
end 

私はこのコードで私のコントローラでの結果取得:

@venues = Venue.search params[:search] 

を、私は、それらをレンダリングし、私は次のコードで会場と呼ばれるモデルをインデックス化していますjson。私が持っている問題は、私がこのURLをヒットしたときです:

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

私は何も得られません。しかし、私はこのURLをヒット:

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

私はすべての会場をボルチモアの都市に配置します。何らかの理由で、1人のキャラクターが違いを生む。理論的には、私は1文字で検索するだけで、ボルティモアのすべての会場に行くべきです - 'b'

ここで何が起こっているのか分かりますか?

は、あなたが1以上に1とmin_prefix_lenまたはmin_infix_lenセットにenable_starセットを持っている場合を除き*、あなたはボルチモアに一致するようにBを取得することはできません(とその後も、私はあなたがBを検索する必要があると思うあなた

答えて

6

ありがとうございましたマッチを得るために)。ここで何が起こっている

は、デフォルトでは、スフィンクスを考えることは、それはBaltimorを置くので、マッチ検討する同様の言葉(文字によってではなく、意味によって)を可能にし、英語ステマを使用するようにスフィンクスを伝えることです同じバスケット内のボルチモア

あなたが一致した任意の単語の一部を取得したい場合は、あなたが設定/ sphinx.ymlで、次のようなものを置く必要があります。

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

その後スフィンクス、再インデックスを停止し、スフィンクスを再起動します。あなたがそれをしたら、B *の検索はボルチモアを返すべきです。

これが役に立ちます。

+0

甘いですが、スフィンクスのドキュメントでそれを見つけました...しかし、それはymlに置くと言われていました。ありがとうございました! – Tony

+0

最後に*を入力する必要はありませんか?木のように検索木は木を打つことなく木工や木工を引っ張るだろう* – Mike

+0

素晴らしい答え。ここでは、詳細についてはhttp://freelancing-god.github.com/ts/en/advanced_config.htmlをご覧ください。 min_infix_lenを1に設定すると、パフォーマンスが低下する可能性があることに注意してください。 – dmonopoly

関連する問題