Sphinx - 何时对字段使用'has'和'indexes'

时间:2010-01-16 16:38:18

标签: ruby-on-rails ruby sphinx thinking-sphinx acts-as-taggable

我几天前在我的ruby on rails 2.3.2上安装了Sphinx和Thinking-Sphinx,并且基本搜索效果很好。这意味着,没有任何条件。现在,我想在某些条件下过滤搜索。

我有公告模型,索引如下:

  define_index do
    indexes title, :as => :title, :sortable => true
    indexes description, :as => :description, :sortable => true
  end

也许我错了,但我注意到只有当我将:sortable => true语法添加到这些属性时,我才能在搜索中将它们用作条件。否则它什么都找不到。

现在,我也在使用acts_as_taggable_on插件,它生成了我的两个数据库表:标签和标签。我没有标签模型,我的公告模型只有acts_as_taggable_on :tags, :categories

我现在要做的是按标签过滤。所以,我尝试添加到我的索引has tags(:id), :as => :tag_ids但没有运气,还有indexes tags(:id), :as => :tag_ids,但它也没有用。

如何构建索引以便我可以执行以下操作:

Announcement.search 'some word', :conditions => {:tag_ids => some_id}

此外,hasindexes

之间存在差异

谢谢, 布赖恩

1 个答案:

答案 0 :(得分:10)

让我反过来回答你的问题。 indexes whatever需要一个字符串,这是sphinx将搜索您提供的文本的内容。

另一方面,has whatever不会将此内容添加到可搜索字段中。它主要是数字,因为在sphinx已经完成搜索之后你会使用这些东西进行排序和过滤。

最后,我相信你希望模型中有has tags(:id), :as => :tag_ids,而你的搜索中需要:with => {:tag_ids => some_id}而不是:conditions。条件用于已编制索引的文本字段,作为对特定字段而不是所有索引字段执行文本搜索的方法。 With用于使用您使用has whatever指定的属性过滤结果。