首页 文章

solr按分数排序不正常

提问于
浏览
0

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

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

[{_ "id":"1","content":[“ java developer”]},

{"id":"2","content":[“_ Java 是面向对象的. Java robust language.Core java ”]},

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

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

字段名称= "content" type = "text_general" multiValued = "true" indexed = "true" stored = "true"

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

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

我期待 Id :2 的内容应该首先出现,因为它包含更多与java相关的匹配 . 但是,solr给出了不一致的结果 .

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

2 回答

  • 0

    您需要在查询中添加typeDef作为edismax,请再次查找以下查询 .

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

    一旦你通过edismax作为defType排序分数开始按预期工作 .

  • 0

    首先,正如Rahul所建议的那样,你应该提到df或'default query field'来明确地执行你的查询 .

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

    粗略地说,分数转化为 (tf)*log(idf) .

    这将确保检索特定查询的最相关文档 . 直觉上,这意味着,由于'Java'也出现在其他文档中,因此区分doc 2的术语可能是'object oriented','robust' .

相关问题