我剛開始學習使用Sunspot/Solr與Rails。如何防止太陽黑子,Solr返回所有記錄時參數[:搜索] =「」
我跟着這個RailsCast http://railscasts.com/episodes/278-search-with-sunspot
當我有沒有搜索查詢和搜索領域是空白的,Solr的默認情況下,返回從文章模型的所有結果。
這裏是我的ArticlesController#指數
def index
@search = Article.search do
fulltext params[:search]
end
@articles = Article.all
@search_results = @search.results
end
當在搜索欄中輸入任何PARAMS,公正 「的」 控制檯輸出以下:
Started GET "/articles?utf8=%E2%9C%93&search=" for 127.0.0.1 at 2013-01-17 12:28:09 -0800
Processing by ArticlesController#index as HTML
Parameters: {"utf8"=>"✓", "search"=>""}
SOLR Request (17.0ms) [ path=#<RSolr::Client:0x007f9b5a6643e0> parameters={data: fq=type%3AArticle&start=0&rows=30&q=%2A%3A%2A, method: post, params: {:wt=>:ruby}, query: wt=ruby, headers: {"Content-Type"=>"application/x-www-form-urlencoded; charset=UTF-8"}, path: select, uri: http://localhost:8982/solr/select?wt=ruby, open_timeout: , read_timeout: } ]
Article Load (0.4ms) SELECT "articles".* FROM "articles"
Article Load (0.4ms) SELECT "articles".* FROM "articles" WHERE "articles"."id" IN (1, 2, 3, 4, 5, 6, 7, 8)
Rendered articles/index.html.erb within layouts/application (7.6ms)
Completed 200 OK in 74ms (Views: 10.8ms | ActiveRecord: 0.8ms | Solr: 17.0ms)
[2013-01-17 12:28:09] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
我想要的行爲是除非給出搜索詞,否則不予退還。 我試圖修改ArticlesController#指標如下:
def index
if params[:search] = ""
@search_results = []
else
@search = Article.search do
fulltext params[:search]
end
@search_results = @search.results
end
@articles = Article.all
end
有了這個條件,當我在搜索欄中輸入任何內容,使param[:search] = ""
,從Solr的,這是期望的行爲返回任何內容。
Started GET "/articles?utf8=%E2%9C%93&search=" for 127.0.0.1 at 2013-01-18 12:02:52 -0800
Processing by ArticlesController#index as HTML
Parameters: {"utf8"=>"✓", "search"=>""}
Article Load (0.5ms) SELECT "articles".* FROM "articles"
Rendered articles/index.html.erb within layouts/application (11.1ms)
Completed 200 OK in 23ms (Views: 14.1ms | ActiveRecord: 0.5ms | Solr: 0.0ms)
[2013-01-18 12:02:52] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
然而,當我輸入搜索詞「紅寶石」,使param[:search] = "ruby"
,不返回任何結果和Solr不被所有調用。
Started GET "/articles?utf8=%E2%9C%93&search=ruby" for 127.0.0.1 at 2013-01-17 12:37:58 -0800
Processing by ArticlesController#index as HTML
Parameters: {"utf8"=>"✓", "search"=>"ruby"}
Article Load (0.5ms) SELECT "articles".* FROM "articles"
Rendered articles/index.html.erb within layouts/application (11.5ms)
Completed 200 OK in 23ms (Views: 14.5ms | ActiveRecord: 0.5ms | Solr: 0.0ms)
[2013-01-17 12:37:58] WARN Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true
我的條件邏輯有問題嗎?或者,我是否錯過了Solr的工作原理?謝謝!
爲什麼你在進行此調用:'@articles = Article.all'? – jdl
我希望有兩個實例變量可用於Article#index ...用戶輸入搜索詞時,「@ articles」顯示搜索結果的所有文章和「@ search_results」。它的工作正常,除了即使搜索字段爲空且「params [:search] =」「''填充了@搜索結果'' –