在Sunspot on Rails中计算命中结果得分的公式是什么?

时间:2011-09-02 08:54:35

标签: ruby-on-rails solr sunspot sunspot-rails

说,我在我的模型中有这个代码:

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>

1 个答案:

答案 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

的问题

总而言之:你提出了一个非常好的问题并得到了非常深刻的答案。我可以在路上编辑我的回复以扩展这个主题。