Solr-多个搜索词的搜索结果得分相同



我想知道如何为多个词条的搜索结果获得不同的分数?

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"时,会出现两个结果。这太完美了。然而,当我查询"johnfisher"时,两个结果都出现了,但得分相同。我想要的是根据搜索词的相关性获得不同的分数。

以下是以下查询的结果http://localhost:8983/solr/select?q=john+fisher%0D%0A&行=10&fl=*%2 得分

<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>

如有任何帮助,将不胜感激

您最好的选择是理解&分析不同因素如何影响你的文档评分,Lucene有有用的功能Explanation,Solr利用它来提供评分的计算方法。你可以在Solr中使用"debugQuery"来查看它是如何派生的,

?q=john&fl=score,*&rows=2&debugQuery=on

Ex响应:

<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

读取:

  • Solr相关性
  • Lucene评分

在我看来,您只是在"name"字段上搜索。这就是为什么分数是一样的。如果你使用DisMax,你可以很容易地在两个字段上搜索,最相关的字段会有更高的分数。

例如

<str name="defType">edismax</str>
<str name="qf">name last_name</str>

另一种方法是使用copyField将2个字段合并为1个字段,并且只在新创建的字段中搜索。

谢谢你们的快速回复,我很感激。

从解释查询中,我能够识别出实际上只在一个字段上执行了搜索。

我发现可以在同一个字段中添加多个字段进行搜索。在schema.xml中,我添加了以下内容:

<copyField source="last_name" dest="text"/>

现在,当使用多个搜索词时,结果会如预期一样出现。

相关内容

  • 没有找到相关文章

最新更新