solr按分数排序不正常

时间:2018-06-22 15:13:43

标签: search solr relevance

我正在使用 Solr v6.2.1 。我们无法使用“ sort score desc”获得准确的结果。

假设我们在索引中有如下文档列表

[{     “ id”:“ 1”,     “ content”:[“ java 开发人员”] }

{     “ id”:“ 2”,     “ content”:[“ Java 是面向对象的。 Java 健壮的语言。核心 java ”] }

{     “ id”:“ 3”,     “ content”:[“ java 与平台无关。 Java 语言。”] }]

内容在架构中被定义为多值字段

字段名=“内容” type =“ text_general” 多值 =“ true”索引=“ true”存储=“ true”

当我使用以下查询搜索Java

卷曲http://localhost:8983/solr/test/select?fl=score,id&q=(java)&wt=json&sort=score描述

我希望 Id:2 的内容优先出现,因为它包含与Java相关的更多匹配项。但是solr给出的结果不一致。

请说明为什么我无法获得理想的结果。

2 个答案:

答案 0 :(得分:0)

  

您需要在查询中添加typeDef作为edismax,请再次在下面的查询中查找。

 http://localhost:8983/solr/test/select?fl=score,id&q=(java)&wt=json&sort=score 
 desc&defType=edismax
  

一旦您通过edismax作为分数的defType排序开始按预期方式工作。

答案 1 :(得分:0)

首先,按照Rahul的建议,您应提及df或“默认查询字段”以明确地执行查询。

第二,您对文档中出现的特定术语出现次数最多(作为第一个结果)的假设不正确。您指的是期限频率或简称为 tf 。 Solr用于计算相关性得分的排名函数使用“ tf”和反向文档频率“ idf”。您可以在Okapi_BM25上了解更多信息。

大致上,分数会转换为(tf)*log(idf)

这将确保检索特定查询的与最相关的文档。直观上,这意味着,由于在其他文档中也存在“ Java”,因此区分doc 2的术语可能是“面向对象的”,“健壮的”。