2016-07-21 26 views
0

2つの減衰関数(両方のガウス)とscript_score関数を持つfunction_scoreクエリがあります。 script_score関数では、私はいくつかのスコアを追加し、乗算します。今私はガウス関数(場所)と結果を掛けて、他のガウス関数(creation_date)と一緒に追加したいと思います。私は新しい文書にブーストを与えるためにそれをしたい。elasticsearch function_scoreクエリのscore_modeを組み合わせることは可能ですか

どうすればこの問題を解決できますか? function_scoreクエリのscore_modeを使用して、私は掛け算または合計することしかできません。

{ 
    "query": { 
    "function_score": { 
     "functions": [ 
     { 
      "gauss": { 
      "location": { 
       "origin": { 
       "lon": 16.37, 
       "lat": 48.21 
       }, 
       "scale": "100km", 
       "offset": "15km", 
       "decay": 0.3 
      } 
      } 
     }, 
     { 
      "gauss": { 
      "creation_date": { 
       "scale": "30d", 
       "offset": "20d", 
       "decay": 0.1 
      } 
      } 
     }, 
     { 
      "script_score": { 
      "lang": "expression", 
      "script": "(((doc['value_a'].value + doc['value_b'] + 1) * boost_a) + (ln(sqrt(doc['value_c'].value + 1)) * boost_c))", 
      "params": { 
       "boost_a": 0.2, 
       "boost_b": 0.5 
      } 
      } 
     } 
     ], 
     "query": { 
     "match_all": {} 
     }, 
     "score_mode": "multiply", 
     "boost_mode": "multiply" 
    } 
    }, 
    "sort": { 
    "_score": "desc" 
    } 
} 

ありがとうございます。

答えて

2

解決策が見つかりました。

{ 
    "query": { 
    "function_score": { 
     "functions": { 
     "gauss": { 
      "creation_date": { 
      "scale": "30d", 
      "offset": "20d", 
      "decay": 0.1 
      } 
     } 
     }, 
     "query": { 
     "function_score": { 
      "functions": [ 
      { 
       "gauss": { 
       "location": { 
        "origin": { 
        "lon": 16.37, 
        "lat": 48.21 
        }, 
        "scale": "100km", 
        "offset": "15km", 
        "decay": 0.3 
       } 
       } 
      }, 
      { 
       "script_score": { 
       "lang": "expression", 
       "script": "(((doc['value_a'].value + doc['value_b'] + 1) * boost_a) + (ln(sqrt(doc['value_c'].value + 1)) * boost_c))", 
       "params": { 
        "boost_a": 0.2, 
        "boost_b": 0.5 
       } 
       } 
      } 
      ], 
      "query": { 
      "match_all": {} 
      }, 
      "score_mode": "multiply", 
      "boost_mode": "multiply" 
     } 
     } 
    }, 
    "score_mode": "multiply", 
    "boost_mode": "sum" 
    }, 
    "sort": { 
    "_score": "desc" 
    } 
} 
関連する問題