2010-01-16 52 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