2010-09-03 51 views
17

我有一個部署延遲作業的模型,該作業更新其某些屬性。該模型宣佈「可搜索」... ...sunspot_rails保存後不會重新索引模型

searchable do 
    text :content, :stored => true 
end 

......我認爲會保存後重新索引。在測試中,這似乎並非如此。如果我運行:rake sunspot:reindex,那麼一切都按預期工作。什麼可能導致這個問題?

+0

你能否爲這個問題添加一些更好的關鍵詞,以便它更好地達到? – Danny 2010-12-08 22:02:14

+0

我不認爲這個問題表達得很好,也沒有解決方案。首先,用戶顯然使用'sunspot_rails',而不僅僅是'太陽黑子'。對於兩個問題,Answers建議討論由於sunspot_rails的默認太陽黑子設置而無法實現的功能。 – nessur 2011-06-27 21:22:39

+0

我也對模型提交的rspec測試感興趣,以確保它的工作。 – 2013-04-02 20:19:19

回答

5

索引只會反映Sunspot.commit被調用後的更改。當您運行rake sunspot:reindex時會自動發生。

太陽黑子的Rails插件也有一個auto_commit_after_request配置選項,在每次請求後都會調用Sunspot.commit_if_dirty,但這不會被後臺進程觸發。

您最好的辦法是在您延遲工作後最後一次致電Sunspot.commit_if_dirty

+2

(重複自己)問題實際上是關於'sunspot_rails'插件,而不是香草太陽黑子。 – nessur 2011-06-27 21:24:17

20

正如Jason提到的那樣,您可以致電Sunspot.commit_if_dirty從您的客戶端發出提交。

從服務器配置方面來說,另一種方法是將solrconfig.xml中的autoCommit屬性設置爲在對索引進行更改時自動發出提交。對於大多數站點而言,60000毫秒(一分鐘)的maxTime就足夠了。

使用autoCommit可能是生產應用程序中更明智的選擇,大量提交可能會輕易影響您的Solr服務器的性能。事實上,當您的網站開始獲得體面的更新時,對於太陽黑子來說,這是一個很好的做法,即禁用auto_commit_after_request option

最後,autoCommit的優點是可以設置並忘記它。

Websolr,我們的默認設置是忽略autoCommit的客戶端發出的提交。

+2

問題實際上是關於'sunspot_rails'插件,而不是香草太陽黑子。 – nessur 2011-06-27 21:23:44

+4

嗨nessur,不知道你想在這裏做什麼點。sunspot_rails只是一個輕量級的包裝器,可以將Sunspot掛接到Rails模型和控制器中。除此之外,這個問題歸結爲發出提交,您可以從curl發出所有客戶端事件。 – 2011-07-10 00:17:15

+0

問題是關於「自動提交」功能的問題,這個非常「簡單的包裝」增加了太陽黑子的基本功能,所以它與用戶安裝的gem完全相關。未記錄的功能使整個世界變得圓滿,並且一般的新手可能會很感興趣地瞭解到sunsport_rails安裝了一個控制器鉤子,默認情況下會對solr索引提交任何未決更改。 – nessur 2011-07-11 18:55:19

6

我和你有完全相同的問題 - 當我測試我的搜索功能時,太陽黑子永遠不會發出提交給solr的提交。如果我手動撥打Sunspot.commitmit一切正常。我用auto_commit_after_request來擺弄,但默認情況下是這樣,所以它不應該有所不同。

因此,經過一些調查後,我發現太陽黑子不會自動發出提交,除非在web請求的上下文中進行更改。如果您正在從測試或後臺作業中進行更改,則必須手動調用Sunspot.commit。