2012-01-25 10 views
1

複数の単語の検索結果に対して異なるスコアを得ることがどのように可能であるか知りたいですか?複数の検索語句のSolr - 同一の検索結果得点?

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

私はSolrの内の2つのインデックスを持って、それぞれ含む:私はちょうど「ジョン」を照会すると

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

両方の結果が出てくる:ID、FIRST_NAME、各インデックスは次のようになり LAST_NAME。パーフェクトです。 しかし、私が "ジョンフィッシャー"を検索すると、両方の結果が出てきますが、同じスコアで表示されます。 私が望むのは、検索用語の関連性に基づいて異なるスコアです。ここで

は、次のクエリ 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

これをチェックしてください:[2つのフィールドで検索](http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_search_for_.22superman.22_in_both_the_title_and_subject_fields) – aitchnyu

答えて

3

をいただければ幸いあなたの最善の策は、さまざまな要因があなたの文書スコアにどのように影響するかを分析する&を理解することですLuceneは有用な機能を持っていますExplanation、Solrはこれを利用してスコアリングの計算方法を提供します。Solrで 'debugQuery'を使用してその導出方法を見ることができます

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

例応答:

<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

それはあなただけの "名前" フィールドに検索しているように私には見えます。スコアが同じ理由です。 DisMaxを使用すると、両方のフィールドで簡単に検索することができます。最も関連性の高いものは高いスコアになります。

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

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

0

迅速な返信をいただき、ありがとうございます。

説明クエリーから、実際には1つのフィールドだけで検索が実行されたことがわかりました。

検索のために同じフィールドに複数のフィールドを追加することが可能であることがわかりました。 スキーマ内です。xml以下を追加しました:

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

複数の検索語を使用すると結果が予想通りに表示されます。

関連する問題