2017-01-23 25 views
1

私のアプリケーションの中で次のPainlessスクリプトクエリを使用しようとしていますが、動作していないようです。構文に問題はありますか?本当にうまく動作しない部分がこのMath.max(doc["level"].value, 1) - 1であることに気付きました。 "id"フィールドはキーワードで、 "level"はバイトであることに注意してください。ElasticSearch Painlessスクリプトが機能しない

{script: {script: { 
     inline: 'doc["id"].value == params.parentDocIds[Math.max(doc["level"].value, 1) - 1]', 
     params: {parentDocIds: parentDocIds} 
}}} 

ありがとうございます!

+0

これに関する最新情報はありますか?私も苦労しています。インラインを使用するときの1つはctxを使用することなので、ctx.doc ["id"] ... –

+0

Painlessは型の影響を受けやすいので、Math.maxから返された値をこのようにキャストしました:(int )Math.max(doc ["level"]。値 – geeko

+0

インデックスのマッピングとこのクエリの目的を指定できますか? –

答えて

0

次のクエリが機能します。 インデックスに一致するようにインデックス名を変更し、木場で試してみてください。

GET todo-index-name-here/_search 
{ 
    "query": { 
    "script": { 
     "script": { 
     "inline": "def idx = (int)Math.max(doc['level'].value, 1) - 1; return (doc['id'].value == params.parentDocIds[idx])", 
     "lang": "painless", 
     "params": { 
      "parentDocIds": [ 
      "x", 
      "y", 
      "z" 
      ] 
     } 
     } 
    } 
    } 
} 
関連する問題