4

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

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”,第二个 - 例如称为“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>
4

1 回答 1

3

评分结果是 Lucene 库的领域,这里详细描述其算法的症结:

要检查原始评分数据,请直接对 Solr 实例运行查询并附加debugQuery=on参数以查看评分数据。

http://localhost:8983/solr/select?q=test&defType=dismax&qf=name_text+facility_type_text&debugQuery=on

对于 Solr 中的一般相关性优化,您可以查阅SolrRelevancyFAQ。它还有一个问题专门展示debugQuery

总而言之:你问了一个很好的问题,而且答案很深刻。我可能会在以后编辑我的回复以扩展该主题。

于 2011-09-03T00:07:59.243 回答