假設我有以下模型,並使其可以通過sunspot_rails
進行搜索。Sunspot Rails通過型號id來訂購搜索結果?
class Case < ActiveRecord::Base
searchable do
end
end
太陽黑子的標準schema.xml
Rails中聲明id
作爲索引字段。當我使用Web界面訪問和Solr的測試查詢類似的查詢:
http://localhost:8982/solr/select/?q=id%3A%22Case+15%22&version=2.2&start=0&rows=10&indent=on
其搜索Cases
與id
等於Case 15
工作正常,並返回結果。
問題是,當我執行在軌控制檯與太陽黑子的Rails搜索:
s = Case.search do
keywords('id:"Case 15"')
end
我得到:
=> <Sunspot::Search:{:fl=>"* score", :rows=>10, :start=>0, :q="id:\"Case 15\"", :defType=>"dismax", :fq=>["type:Case"]}>
這表明,正確地放入:q
正確的查詢值,但是命中0:
s.hits
回報
=> []
如果我們假設keywords
不等同,只有搜索text
場(全文搜索),而不是該領域的冒號:
之前定義的話,我可以嘗試以下方法:
s = Case.search do
with(:id, "Case 15")
end
但這種失敗,太陽黑子異常:
Sunspot::UnrecognizedFieldError: No field configured for Case with name 'id'
如何搜索使用索引標準的Solr /太陽黑子id
場我的模型?
爲了讓這個問題更加有用,我怎樣才能通過id命令。以下不起作用:
s = Case.search do
keywords("xxxx")
order_by :id, :desc
end
不起作用。 Sunspot::UnrecognizedFieldError: No field configured for Case with name 'id'
既然我發佈這個問題已經很長時間了,與此同時,我已經實現了aw orkaround,類似於你的第一個建議添加我自己的id字段。但它是'id'我添加如下:'class Case
你的問題在我的回答中得到了回答:) 1.爲什麼不這樣做:因爲它是太陽黑子使用的內部場所,所以你不應該使用它或者對它做出假設,因爲它會破壞封裝原則(另外,太陽黑子的版本,其含義或其實現可以完全改變)2.如果你真的想使用它,看看我的答案的最後一部分。 –
我當然發現你的帖子很有用。 – vise