2

クラスのセットでグローバル検索を行いたくないのですが、使用するインデックスの配列を指定したいのですが、これは可能ですか?私はグーグルでさまざまな解決策を試しましたが、まだ運がありません。

これは正しく機能します(ただし、1つのインデックスに対して)。

ThinkingSphinx.search "query", :classes => [Foo, Bar], :index => "my_foo_index"

これはエラーをスローします:

ThinkingSphinx.search "query", :classes => [Foo, Bar], :index => "my_foo_index,my_bar_index"
> ThinkingSphinx::SphinxError: distributed index 'my_foo_index' in multi-index query found

これを行うように:

ThinkingSphinx.search "query", :classes => [Foo, Bar], :index => ["my_foo_index", "my_bar_index"]
> NoMethodError: undefined method `force_encoding' for ["my_foo_index", "my_bar_index"]:Array

また、FooモデルとBarモデルの両方で「my_index」のようにモデルのインデックスに同じ名前を付けようとしましたが、インデックスを再構築すると次のエラーが発生しました。

ERROR: section 'my_index_core_0' (type='source') already exists in /dev/config/development.sphinx.conf line 116 col 1.

私が思いつくことができる唯一の解決策は、モデルごとに複数の検索を実行してから、結果をマージすることです。私は検索の関連性を失うので、それは少し吹き飛ばされます...

何か案は?

4

1 に答える 1

7

次のことを試してください。

ThinkingSphinx.search 'query', :classes => [Foo, Bar],
  :index => 'my_foo_index_core,my_bar_index_core'

デルタがある場合は、 と もリストに追加my_foo_index_deltamy_bar_index_deltaます。これにより、分散インデックスが回避されます。

于 2012-04-27T12:02:28.613 に答える