2016-06-01 4 views
0

でソート:Elasticsearchは、私は次のスクリプトをソートするためにしようとしているスクリプト

if (doc['stats.favoriteCount'].value > doc['stats.likeCount'].value) 
{ 
    return doc['stats.favoriteCount'].value; 
} 

return doc['stats.likeCount'].value; 

これは私が使用しているリクエストです:

{ 
    "sort": [ 
     { 
     "_script": { 
      "script": { 
       "file": "sorting-likes", 
       "lang": "groovy" 
      }, 
      "type": "number" 
     } 
     } 
    ] 
} 

そして、これは私が得ているエラーです:

"reason": { 
    "type": "groovy_script_execution_exception", 
    "reason": "failed to run file script [sorting-likes] using lang [groovy]", 
    "caused_by": { 
     "type": "missing_method_exception", 
     "reason": "No signature of method: 7b6bb56cf8fda7e1301b150b05d81813258c223b.if() is applicable for argument types: (java.lang.Boolean, 7b6bb56cf8fda7e1301b150b05d81813258c223b$_run_closure1) values: [true, [email protected]]\nPossible solutions: wait(), run(), run(), any(), find(), is(java.lang.Object)" 
    } 
} 

私は本当に何が間違って見ることができません。これはもっと長いスクリプトだったので、私はそれを使用できる最小限にまで細分化しました。インラインがうまく機能として、このコードを実行する

{ 
    "sort": [ 
     { 
     "_script": { 
      "script": { 
       "inline": "if (doc['stats.favoriteCount'].value>doc['stats.likeCount'].value)return doc['stats.favoriteCount'].value;return doc['stats.likeCount'].value;", 
       "lang": "groovy" 
      }, 
      "type": "number" 
     } 
     } 
    ] 
} 

それでも感謝

答えて

0

元のスクリプトが動作しなかった理由は全く分からないが、これはうまく機能:

クエリ:

"sort": [ 
    { 
    "_script": { 
     "script": { 
      "file": "sorting", 
      "params": { 
       "param0": "stats.likeCount", 
       "param1": "stats.favoriteCount", 
       "param2": "", 
       "param3": "" 
      }, 
      "lang": "groovy" 
     }, 
     "type": "number", 
     "order": "asc", 
     "missing": 0 
    } 
    } 
] 

スクリプト

if (!param2) 
    return max(doc[param0].value, doc[param1].value); 

if (!param3) 
    return max(doc[param0].value, max(doc[param1].value, doc[param2].value)); 

return max(doc[param0].value, max(doc[param1].value, max(doc[param2].value, doc[param3].value))); 
関連する問題