说,我的模型中有这个代码:
class Facility < ActiveRecord::Base
...
searchable do
text :name
text :facility_type do
end
...
这在搜索 Controller 中:
@search = Facility.search do
keywords(query) do
boost_fields :name => 1.9,
:facility_type => 1.98
end
...
我有两个 Facility 对象——第一个类型为“cafe”,但名称中没有“cafe”一词,第二个——例如,称为“cafe sun”,但类型为“bar”事实。
我使用 query="cafe"运行搜索并在响应中获得两个设施,但“cafe sun”的得分为 5.003391,真正的“cafe”得分为 1.250491
第二次尝试我设置
boost_fields :name => 1.9, :facility_type => 3
“cafe sun”的得分没有变化,但“cafe”有所增长 - 1.8946824
所以,只要结果按分数排序,我很感兴趣它是如何计算的?
还是我选择了错误的标记器或其他东西,这是我在 schema.xml 中的内容
<fieldType name="text" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory"
minGramSize="3"
maxGramSize="30"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
最佳答案
评分结果是Lucene库的领域,这里详细描述其算法的关键:
要检查原始评分数据,请直接对您的 Solr 实例运行查询并附加
debugQuery=on
参数以查看评分数据。http://localhost:8983/solr/select?q=test&defType=dismax&qf=name_text+facility_type_text&debugQuery=on
对于 Solr 中的一般相关性优化,您可以查阅 SolrRelevancyFAQ 。它还有一个问题专门演示了 the output of
debugQuery
总而言之:你问了一个非常好的问题,答案非常深刻。我可能会编辑我的回复以扩展该主题。
关于ruby-on-rails - Sunspot on Rails 中命中结果分数的计算公式是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7281195/