solr:ドキュメントごとにフィールドノームが異なり、ドキュメントブーストなし

StackOverflow https://stackoverflow.com/questions/3102895

質問

スコアごとに検索結果を注文したいのですが、スコアは不適切に計算されています。これは、必ずしもそうではないということです 不適切です, 、しかし、予想とは違っていて、その理由はわかりません。私の目標は、スコアを変更しているものを削除することです。

2つのオブジェクト(ObjectaのスコアがObjectbよりも高いと予想される)で一致する検索を実行すると、ObjectBが最初に返されます。

この例では、私のクエリは単一の用語である「リンゴ」であるとしましょう。

Objectaのタイトル:「リンゴはリンゴです」(2/3用語)
Objectaの説明:「リンゴのアプリルにリンゴがあり、リンゴはリンゴ全体にすべてのリンゴになりました!」 (6/18用語)
ObjectBのタイトル:「リンゴは素晴らしい」(1/3用語)
ObjectBの説明:「リンゴ室にリンゴがありましたが、リンゴはリンゴ全体に悪くなりました!」 (4/18用語)

タイトルフィールドにはブースト(またはむしろ1のブースト)がなく、説明フィールドのブーストは0.8です。 solrconfig.xmlまたは通過するクエリを通じてドキュメントブーストを指定していません。ドキュメントのブーストを指定する別の方法がある場合、私はそれを逃している可能性があります。

分析後 explain 印刷、Objecaのように見えます 私が望むように、私が望むように、ObjectBよりも高いスコアを適切に計算する 1 違い:ObjectBのタイトルFieldNormは、常にObjectaよりも高くなっています。


ここに続きます explain プリントアウト。ご存知のように:タイトルフィールドはそうです mditem5_tns そして、説明フィールドはです mditem7_tns:

ObjectB:
1.3327172 = (MATCH) sum of:
  1.0352166 = (MATCH) max plus 0.1 times others of:
    0.9766194 = (MATCH) weight(mditem5_tns:appl in 0), product of:
      0.53929156 = queryWeight(mditem5_tns:appl), product of:
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.8109303 = (MATCH) fieldWeight(mditem5_tns:appl in 0), product of:
        1.0 = tf(termFreq(mditem5_tns:appl)=1)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        1.0 = fieldNorm(field=mditem5_tns, doc=0)
    0.58597165 = (MATCH) weight(mditem7_tns:appl^0.8 in 0), product of:
      0.43143326 = queryWeight(mditem7_tns:appl^0.8), product of:
        0.8 = boost
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.3581977 = (MATCH) fieldWeight(mditem7_tns:appl in 0), product of:
        2.0 = tf(termFreq(mditem7_tns:appl)=4)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.375 = fieldNorm(field=mditem7_tns, doc=0)
  0.2975006 = (MATCH) FunctionQuery(1000.0/(1.0*float(top(rord(lastmodified)))+1000.0)), product of:
    0.999001 = 1000.0/(1.0*float(1)+1000.0)
    1.0 = boost
    0.2977981 = queryNorm

ObjectA:
1.2324848 = (MATCH) sum of:
  0.93498427 = (MATCH) max plus 0.1 times others of:
    0.8632177 = (MATCH) weight(mditem5_tns:appl in 0), product of:
      0.53929156 = queryWeight(mditem5_tns:appl), product of:
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.6006513 = (MATCH) fieldWeight(mditem5_tns:appl in 0), product of:
        1.4142135 = tf(termFreq(mditem5_tns:appl)=2)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.625 = fieldNorm(field=mditem5_tns, doc=0)
    0.7176658 = (MATCH) weight(mditem7_tns:appl^0.8 in 0), product of:
      0.43143326 = queryWeight(mditem7_tns:appl^0.8), product of:
        0.8 = boost
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.6634457 = (MATCH) fieldWeight(mditem7_tns:appl in 0), product of:
        2.4494898 = tf(termFreq(mditem7_tns:appl)=6)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.375 = fieldNorm(field=mditem7_tns, doc=0)
  0.2975006 = (MATCH) FunctionQuery(1000.0/(1.0*float(top(rord(lastmodified)))+1000.0)), product of:
    0.999001 = 1000.0/(1.0*float(1)+1000.0)
    1.0 = boost
    0.2977981 = queryNorm
役に立ちましたか?

解決

問題はステムマーによって引き起こされます。 「リンゴ」を「リンゴ」に拡張します。ドキュメントBにはステムマーによって拡張されている1つの用語のみが含まれているため、フィールドはより短くなります。

これにより、異なるフィールドノームが発生します。

他のヒント

FieldNormは3つのコンポーネントで計算されます - フィールドでのインデックスタイムブースト、ドキュメントのインデックスタイムブースト、およびフィールドの長さ。インデックスタイムブーストを提供していないと仮定すると、差はフィールドの長さでなければなりません。

したがって、長さのフィールド値の場合、長さはより高いため、Bがタイトルのフィールドノーム値が高い場合、タイトルのトークンの数がAよりも少ない必要があります。

ルーセンのスコアリングの詳細な説明については、次のページを参照してください。

http://lucene.apache.org/java/2_4_0/scoring.html http://lucene.apache.org/java/2_4_0/org/apache/lucene/search/similarity.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top