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

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库的领域,这里详细描述其算法的关键:

  • http://lucene.apache.org/core/3_6_1/api/core/org/apache/lucene/search/Similarity.html
  • http://lucene.apache.org/core/3_6_1/scoring.html

  • 要检查原始评分数据,请直接对您的 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/

    10-12 17:21