5

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

我有 Announcement 模型,索引如下所示:

  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, :categoriesAnnouncements 模型。

我现在想做的是按标签过滤。所以,我尝试添加到我的索引 has tags(:id), :as => :tag_ids中,indexes tags(:id), :as => :tag_ids但没有成功。

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

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

而且,这是和之间的has区别indexes

谢谢,布赖恩

4

1 回答 1

10

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

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

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

于 2010-01-16T23:12:04.163 回答