2013-12-23 74 views
0

我想如下創建TS範圍的正確方法:什麼是使用思維斯芬克斯範圍

include ThinkingSphinx::Scopes 
sphinx_scope(:status_approved) { 
     {:conditions => {:status => "approved"}} 
    } 
default_sphinx_scope :status_approved 

我的指數之文件是:

indexes name, status 
has user_id, created_at 

兩個問題:

  1. 是否需要將字段狀態定義爲索引才能使條件字符串過濾器起作用?似乎我得到一個沒有字段在架構查詢錯誤,如果我不這樣做。
  2. 如果需要將其定義爲索引的一部分,那麼只要有人更新了狀態字段,它將不會顯示在結果中,直到發生下一個重新索引。這是使用字符串過濾TS範圍的唯一方法嗎?還是有更好的方法來做到這一點?

我用Rails 3.2.16和3.0.6 TS

回答

3
  1. 獅身人面像範圍是爲你的獅身人面像搜索,所以是的,你需要在你的索引定義地位,作爲一個字段,如果你在獅身人面像中使用它。
  2. 如果您希望儘快更新您的獅身人面像索引數據,您可能需要使用增量索引進行調查(可能使用Delayed JobSidekiq將其從Web進程中移除)。或者,您也可以使用Sphinx的real-time indices
+1

帕特,你打了我15分鐘與您的帖子,而我還在打字。 :-)我會接受你的回答,因爲你給我提供了更多的調查選擇。 THKS –

0

後進一步研究回答我自己的問題:

  1. 我必須通過文檔中進行搜索,但沒有發現任何具體提到這一點。我可能錯過了它。然而,通過試驗和錯誤,我發現如果我想使用字符串過濾器方法,我必須將該字段添加到索引。否則,它會抱怨該字段在模式中找不到。
  2. TS中引入了一個名爲的「新」功能,實時索引顯然解決了這個問題。這在作者的博客http://freelancing-gods.com/中提到,我還沒有嘗試過。在任何情況下,我採取了不同的路線,這些路線使用默認範圍,並使用索引中的過濾來代替。在我的索引文件,我現在有:

    indexes name, status 
    has user_id, created_at 
    where "status = 'approved'" 
    

我不再需要定義在我的模型本身默認的範圍。這在任何情況下仍然需要定期重新索引。