gpt4 book ai didi

ruby-on-rails - Solr(太阳黑子)在非关键字搜索上的查询时间提升

转载 作者:行者123 更新时间:2023-12-05 01:23:41 26 4
gpt4 key购买 nike

鉴于我想找到 20 个相关结果,我将如何提升 any_of (with(:id).any_of(co_author_ids)) 中的第一个条件,以便如果有 20 个结果与所述条件匹配,它将返回而不是尝试匹配基于第二个标准?

@solr_search = User.solr_search do
paginate(:per_page => 20)
with(:has_email, true)

any_of do
with(:id).any_of(co_author_ids)
with(:hospitals_id).any_of(hopital_ids)
end
end

最初我不认为 boosting 是必要的,因为我认为 any_of 会产生级联效果,但它似乎并没有像那样工作。我知道谁可以对关键字和全文搜索进行查询时间提升,但一直无法使用 with() 方法进行处理。

最佳答案

由于 co_author_ids 是一个多值键,我有足够的理由相信没有办法实现这一点。尽管使用单值键可以通过使用函数查询的 solr 排序来实现这种级联效果。 http://wiki.apache.org/solr/FunctionQuery#Sort_By_Function与 adjust_solr-params 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

所以这将根据 if(author_id_i = #{id},1,0) 的值进行排序,作为返回,会将所有 auhtor_id 与用户相同的记录放在最上面。

我不知何故在使用 IF 函数时遇到了问题,所以我改为使用(实际上它们都是相同的):
@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["sort"] 做很多很酷的事情,但在这种特殊情况下它不能完成(恕我直言),因为它是一个多值字段
前任:
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"
但截至目前这是不可能的(再次恕我直言)。

关于ruby-on-rails - Solr(太阳黑子)在非关键字搜索上的查询时间提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11785042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com