5

Thinking Sphinx プラグインで Sphinx を使用しています。次のコード (および rake thinking_sphinx:index コマンド) を使用して、Venue というモデルにインデックスを付けました。

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キャラで差がつく。理論的には、「b」という 1 文字で検索するだけで、ボルチモアのすべての会場を取得できるはずです。

ここで何が起こっているか知っている人はいますか?

ありがとうございました

4

1 に答える 1

6

enable_star1 に設定しmin_prefix_lenたり、1 以上に設定したりしない限りmin_infix_len、B をボルチモアに一致させることはできません (その場合でも、一致させるには B* を検索する必要があると思います)。

ここで何が起こっているかというと、デフォルトで、Thinking Sphinx は Sphinx に英語のステマーを使用するように指示します。これにより、類似した単語 (意味ではなく文字によって) が一致すると見なされるため、BaltimorBaltimoreが同じバスケットに入れられます。

一致する単語の一部を取得したい場合は、config/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

次に、Sphinx を停止し、インデックスを再作成して、Sphinx を再起動します。これが完了したら、B* を検索すると Baltimore が返されるはずです。

お役に立てれば。

于 2009-04-16T00:07:51.733 に答える