1

複数の用語の検索結果に対して異なるスコアを取得する方法を知りたいですか?

以下の例に示すように、クエリに複数の用語が含まれている場合でも、solrの特定の結果のスコアは同じになります。

Solrには2つのインデックスがあり、それぞれに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>

どんな助けでも大歓迎です

4

3 に答える 3

4

Your best bet is to understand & analyse how different factors affect your document score, Lucene has helpful feature Explanation, Solr leverage this to provide how scoring is calculated you can use 'debugQuery' in Solr to see how it is derived,

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

besides this, you can use explainOther to find out how a certain document did not match the query.

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

Do Read:

于 2012-01-25T19:05:35.470 に答える
1

「名前」フィールドのみを検索しているように見えます。そのため、スコアは同じです。DisMaxを使用すると、両方のフィールドを簡単に検索でき、最も関連性の高いフィールドのスコアが高くなります。

例えば

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

もう 1 つの方法は、copyField を使用して 2 つのフィールドを 1 つのフィールドに結合し、新しく作成されたフィールドのみを検索することです。

于 2012-01-26T12:17:34.537 に答える
0

迅速な返信ありがとうございます。

説明クエリから、実際に検索が 1 つのフィールドのみで実行されたことを確認できました。

検索用に同じフィールドに複数のフィールドを追加できることがわかりました。schema.xml に以下を追加しました。

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

複数の検索語を使用した場合に、結果が期待どおりに表示されるようになりました。

于 2012-01-26T14:12:40.257 に答える