2012-04-26 111 views
2

我不想在一组类上进行全局搜索,但我想指定它应该使用的索引数组,这可能吗?我已经搜索并尝试了不同的解决方案,但没有运气。使用Thinking Sphinx进行多索引全局搜索

这工作正常(尽管一个索引)。

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- “my_index”模型和酒吧模型,但当重建索引时出现此错误:

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

我能想出的唯一解决方案是对每个模型进行多次搜索,然后合并结果。这一点吹一点,因为我会失去在搜索的相关性...

任何想法?

回答

7

尝试以下操作:

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

如果你有增量,增加my_foo_index_deltamy_bar_index_delta的名单。这将避免分布式指数。

+0

感谢帕特,这个伎俩,尽管它可能不会像人们希望的那样直接向前:)也非常感谢你提供了一个真棒插件,保持良好的工作! – boena 2012-04-27 14:44:58