我正在使用 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 回答
首先,正如Rahul所建议的那样,你应该提到df或'default query field'来明确地执行你的查询 .
其次,您对特定术语最多出现的文档的假设显示为第一个结果是不正确的 . 你所指的是 term frequency 或简称 tf . Solr用于计算相关性得分的排名函数使用'tf',以及'idf',逆文档频率 . 你可以在这里阅读更多相关信息Okapi_BM25 .
粗略地说,分数转化为
(tf)*log(idf)
.这将确保检索特定查询的最相关文档 . 直觉上,这意味着,由于'Java'也出现在其他文档中,因此区分doc 2的术语可能是'object oriented','robust' .