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

时间:2012-01-25 16:49:15

标签: search solr lucene edismax

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

即使查询中有多个术语,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>

非常感谢任何帮助

3 个答案:

答案 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"/>

现在,当使用多个搜索字词时,结果会按预期显示。

相关问题