【问题标题】:solr sort by score not working properlysolr 按分数排序无法正常工作
【发布时间】:2018-12-02 02:40:21
【问题描述】:

我正在使用 Solr v6.2.1。我们没有使用“排序分数 desc”获得准确的结果。

假设我们的索引中有一个文档列表,如下所示

[{ “id”:“1”, "内容": ["java 开发者"] },

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

{ “id”:“3”, "content": ["java 独立于平台。Java 语言。"] }]

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

field name="content" type="text_general" multiValued="true" indexed="true" stored="true"

当我使用以下查询搜索 java 时

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

我希望具有 Id :2 的内容应该排在第一位,因为它包含更多与 java 相关的匹配项。但是 solr 给出的结果不一致。

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

【问题讨论】:

  • 匹配的数量不是用于计算分数的唯一因素(也使用字段的长度,其中短字段被认为更重要)。将 debugQuery=true 附加到您的查询 URL 以查看每个分数的准确计算方式。您也不必明确按分数排序,这是默认完成的。您还应该在搜索时提供一个字段名称,例如content:java,这样您就可以确定您正在搜索您认为正在搜索的字段。

标签: search solr relevance


【解决方案1】:

您需要在查询中添加 typeDef 为 edismax,请重新查找下面的查询。

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

一旦您将 edismax 作为 defType 传递,对分数的排序就会开始按预期工作。

【讨论】:

    【解决方案2】:

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

    其次,您对特定术语出现次数最多的文档作为第一个结果显示的假设是不正确的。您所指的是词频或简称tf。 Solr 用于计算相关性分数的排名函数使用“tf”和“idf”,即逆文档频率。你可以在这里Okapi_BM25阅读更多信息。

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

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

    【讨论】:

    • .. 但查询中不存在这些术语,因此它们不会影响计算的 tf/idf。但 字段长度 确实如此,而且缩短的字段通常比具有更多术语的字段得分更高。
    • 我的意思是,如果查询是针对“面向对象”或“稳健”的,那么 doc2 的得分会更高。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多