2017-07-07 22 views
0

のためのスコア範囲(または最大スコア)を設定する方法です。問題は、特定の条件では、私のクエリは他のすべてのクエリ結果をキャンセルするには大きすぎるスコアがあることです。ここでは、私は非常に単純なクエリを持っているが、クエリ

は、説明の一部です:

"details" => [ 
[0] { 
     "value" => 63.656006, 
"description" => "sum of:", 
    "details" => [ 
    [0] { 
       "value" => 63.656006, 
     "description" => "weight(title.de:kandinsky in 1694239) [PerFieldSimilarity], result of:", 
      "details" => [ 
      [0] { 
         "value" => 63.656006, 
       "description" => "score(doc=1694239,freq=1.0 = termFreq=1.0\n), product of:", 
        "details" => [ 
        [0] { 
           "value" => 4.0, 
         "description" => "boost", 
          "details" => [] 
        }, 
        [1] { 
           "value" => 11.3820715, 
         "description" => "idf, computed as log(1 + (docCount - docFreq + 0.5)/(docFreq + 0.5)) from:", 
[...] 

は、あなたが見ることができたが、私が原因IDFに11.38のスコアを持っています。 私の他のクエリ(スコアは1〜3)はまったく役に立たない。

私の質問は:

私は、クエリのための最大の可能なスコアを設定するにはどうすればよいですか?

また、クエリのスコアの範囲を設定することはできますか?

このフィールドにはconstant_scoreクエリを避けたいと思いますが、このフィールドにはいくつかのTF/IDFとスコア概念が必要ですが、それほど強力ではありません。

私はこれを試してみました:

function_score: { 
    query: { match: { 
    field => term, 
    }}, 
    score_mode: :avg, 
    script_score: { 
    script: { 
     inline: "4 * (1 + Math.log(2 + _score))", 
    } 
    }, 
} 

それは良いでしょうが、それはまだ特定のケースで非常に高いスコアを行うことができます。

答えて

関連する問題