2016-11-14 77 views
0

我想操縱,通過功能計算出的最終得分。操縱最終得分

{ 
    "query": { 
     "function_score": { 
      "functions": [ 
       { 
        //Some decay function --> f1 
       }, 
       { 
        //Some decay function --> f2 
       }, 
       { 
        //Some field_value_factor --> f3 
       }     
      ], 
      "score_mode": "sum", 
      "boost_mode": "replace" 
     } 
    } 
} 

這個查詢計算最終得分是這樣的:final score = f1 + f2 + f3

有沒有一種方法,使最終的觸摸進球也是這樣嗎?

final score = (f1 + f2 + f3) * doc['fancy_field']

回答

3

可以具有script_score功能將由doc.fancy_field.value乘以包裹查詢(即F1 + F2 + F3)的_score另一個內包裝你function_score查詢。

{ 
    "query": { 
    "function_score": { 
     "query": { 
      "function_score": { 
      "query": {"match_all": {}}, 
      "functions": [ 
       { 
        //Some decay function --> f1 
       }, 
       { 
        //Some decay function --> f2 
       }, 
       { 
        //Some field_value_factor --> f3 
       }     
      ], 
      "score_mode": "sum", 
      "boost_mode": "replace" 
      } 
     }, 
     "functions": [ 
     { 
      "script_score": { 
      "script": { 
       "inline": "_score * doc['fancy_field'].value" 
      } 
      } 
     } 
     ], 
     "score_mode": "multiply", 
     "boost_mode": "replace" 
    } 
    } 
} 
+0

幫助很大,謝謝。 – gunererd

+0

高興它幫助;-) – Val