说,我在我的模型中有这个代码:
class Facility < ActiveRecord::Base
...
searchable do
text :name
text :facility_type do
end
...
这在搜索控制器中:
@search = Facility.search do
keywords(query) do
boost_fields :name => 1.9,
:facility_type => 1.98
end
...
我有两个Facility对象 - 第一个有“咖啡馆”类型,但名字中没有“cafe”字样,第二个 - 例如“cafe sun”,但是是“bar” “事实上。”
我使用query =“cafe”运行搜索并在响应中获得两个设施,但“咖啡馆太阳”的分数为5.003391,真正的“咖啡馆”的分数为1.250491
第二次尝试我设置
boost_fields :name => 1.9, :facility_type => 3
“咖啡馆太阳”的分数没有变化,但“咖啡馆”有点长大 - 1.8946824
所以,只要结果按分数排序,我感兴趣的是如何计算?
或者我选择了错误的tokenizer或者其他东西,这就是我在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>
答案 0 :(得分:2)
评分结果是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
总而言之:你提出了一个非常好的问题并得到了非常深刻的答案。我可以在路上编辑我的回复以扩展这个主题。