我想知道如何为多项搜索结果获得不同的分数?
即使查询中有多个术语,solr中的某些结果也会得到相同的分数,如下例所示。
我在Solr中有两个索引,每个索引包含:id,first_name,last_name 每个索引如下所示:
<doc>
<str name="id">1</str>
<str name="last_name">fisher</str>
<str name="name">john</str>
</doc>
<doc>
<str name="id">2</str>
<str name="last_name">darby</str>
<str name="name">john</str>
</doc>
当我查询“john”时,两个结果都会出现。那是完美的。 然而,当我查询“john fisher”时,两个结果都会出现,但得分相同。 我想要的是基于搜索词的相关性的不同分数。
以下是查询的结果 http://localhost:8983/solr/select?q=john+fisher%0D%0A&rows=10&fl= *%2Cscore
<response>
...
<result name="response" numFound="2" start="0" maxScore="0.85029894">
<doc>
<float name="score">0.85029894</float>
<str name="id">1</str>
<str name="last_name">fisher</str>
<str name="name">john</str>
</doc>
<doc>
<float name="score">0.85029894</float>
<str name="id">2</str>
<str name="last_name">darby</str>
<str name="name">john</str>
</doc>
</result>
</response>
非常感谢任何帮助
答案 0 :(得分:3)
你最好的选择是理解&amp;分析不同因素如何影响您的文档得分,Lucene有一个有用的功能Explanation
,Solr利用它来提供计算得分的方法,您可以在Solr中使用'debugQuery'来查看它的派生方式,
?q=john&fl=score,*&rows=2&debugQuery=on
Ex Response:
<lst name="debug">
<str name="rawquerystring">john</str>
<str name="querystring">john</str>
<str name="parsedquery">+DisjunctionMaxQuery((text:john))</str>
<str name="parsedquery_toString">+(text:john)</str>
<lst name="explain">
<!-- Score calulation for Result#1 -->
<str>
2.1536596 = (MATCH) fieldWeight(text:john in 36722), product of:
1.0 = tf(termFreq(text:john)=1)
8.614638 = idf(docFreq=7591, maxDocs=15393998)
0.25 = fieldNorm(field=text, doc=36722)
</str>
<!-- Score calulation for Result#2 -->
<str>
2.1536596 = (MATCH) fieldWeight(text:john in 36724), product of:
1.0 = tf(termFreq(text:john)=1)
8.614638 = idf(docFreq=7591, maxDocs=15393998)
0.25 = fieldNorm(field=text, doc=36724)
</str>
</lst>
除此之外,您还可以使用explainOther
了解某个文档与查询的匹配方式。
?q=john&fl=score,*&rows=2&debugQuery=on&explainOther=on
请阅读:
答案 1 :(得分:1)
在我看来,您只搜索“名称”字段。这就是为什么分数是一样的。如果您使用DisMax,则可以轻松搜索这两个字段,而最相关的字段将获得更高的分数。
e.g。
<str name="defType">edismax</str>
<str name="qf">name last_name</str>
另一种方法是将2个字段与copyField组合成1个字段,并仅在新创建的字段中搜索。
答案 2 :(得分:0)
感谢快速回复的人,我很感激。
从解释查询中我能够确定搜索确实仅在一个字段上执行。
我看到可以在同一个字段中添加多个字段进行搜索。 在schema.xml中,我添加了以下内容:
<copyField source="last_name" dest="text"/>
现在,当使用多个搜索字词时,结果会按预期显示。