因爲co_author_ids是一個多值鍵,我有足夠的理由相信沒有辦法做到這一點。儘管使用單值鍵可以通過使用函數查詢使用solr排序來實現這種級聯效果。 http://wiki.apache.org/solr/FunctionQuery#Sort_By_Function與adjust_solr-PARAMS aong http://sunspot.github.io/docs/Sunspot/DSL/Adjustable.html
例子: 假設你有這樣的查詢:
@solr_search = User.solr_search do
paginate(:per_page => 20)
with(:has_email, true)
any_of do
with(:id,author_id) #assuming author id is a solr index
with(:hospitals_id).any_of(hopital_ids)
end
end
,現在在這種情況下,你想有一個連鎖效應,並希望給予更多的優惠,以精確的匹配與AUTHOR_ID你可以做這樣
@solr_search = User.solr_search do
paginate(:per_page => 20)
with(:has_email, true)
any_of do
with(:id,author_id) #assuming author id is a solr index
with(:hospitals_id).any_of(hopital_ids)
end
adjust_solr_params do |p|
p["sort"] = "if(author_id_i = #{id},1,0) desc" #note author_id_i solr eq of author_id
end
end
所以這將排序,如果值的基礎上(author_id_i =#(編號),1,0),作爲回報,將會把所有的記錄與auhtor_id爲相同的用戶在上面。
不知何故,我是越來越使用問題IF函數,所以我代替(practicaaly兩者相同):
@solr_search = User.solr_search do
paginate(:per_page => 20)
with(:has_email, true)
any_of do
with(:id,author_id) #assuming author id is a solr index
with(:hospitals_id).any_of(hopital_ids)
end
adjust_solr_params do |p|
p[:sort] = "min(abs(sub(author_id_i,#{id})),1) asc"
end
end
我偶然發現了這也http://wiki.apache.org/solr/SpatialSearch在尋找一個解決方案,如果你想按距離排序,你可以這樣做:
@solr_search = User.solr_search do
paginate(:per_page => 20)
with(:has_email, true)
any_of do
with(:id,author_id) #assuming author id is a solr index
with(:hospitals_id).any_of(hopital_ids)
end
adjust_solr_params do |p|
p[:pt] = "#{latitude_of_your_interest},#{longitude_of_your_interest}"
p[:sfield] = :author_location #your solr index which stores location of the author
p[:sort] = "geodist() asc"
end
end
總的來說,我會說你可以做很多很酷的事情p [「排序」],但在這種特殊情況下,它不能做(恕我直言),因爲它是多值字段 例如: Using multivalued field in map function Solr function query that operates on count of multivalued field
我想他們可能只是提供了針對多領域包括功能,我們可以只寫 p["sort"] ="if(include(co_authors_ids,#{id}), 1, 0) desc"
但截至目前其不可能(再次恕我直言)
你碰巧得到了一個解決方案,因爲這正是我所期待的。 – 2013-07-30 07:45:27
我沒有找到Solr的解決方案。我結束了移動到Elasticsearch搜索和使用恆定分數查詢:http://www.elasticsearch.org/guide/reference/query-dsl/constant-score-query/ – brupm 2013-07-30 16:01:06
耶在這個特殊的情況下solr失敗,但如果你想要在單值索引索引上實現這種級聯效果,那麼可以通過在solr params中使用函數進行排序來完成。如果我的答案中有答案,以防其他人浪費時間用solr實現這一點:) – 2013-07-31 14:46:05