2010-01-16 50 views
5

我几天前在rails 2.3.2上安装了Sphinx和Thinking-Sphinx,基本搜索功能非常棒。这意味着,没有任何条件。现在,我想用一些条件过滤搜索。狮身人面像 - 何时在字段中使用'has'和'indexes'

我有公告模型和指标如下所示:

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之间

, 布赖恩

回答

10

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

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

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

+0

非常感谢!我会试试看。 – 2010-01-17 18:43:12

+0

我不知道为什么,但它不工作。正如我之前所说,我没有Tag模型,我只是使用acts_as_taggable_on插件。这个问题是否有可能导致问题? – 2010-01-17 18:52:15

+0

我的意思是,在公告表格中没有字段“标签”。该插件生成两个表格:标签和标签。所以,公告和标签之间的关系是通过标签表。这与这有什么关系? – 2010-01-17 19:11:47