2016-07-14 8 views
0

私はESの仕組みについて頭を落とそうとしていますが、成功しないようです。 JSONファイルを読み込んで、既存のものから値を計算して各エントリに新しいプロパティを追加したいと思います。これの構文は何でしょうか?私はそれを働かせるためにドキュメンテーションからの情報をまとめるように見えません。ありがとうございました!弾性検索 - バルクでの計算で新しいプロパティを取得する

私は/mystuffの下ですべてのドキュメントに

POST /mystuff/1/_update 
{ 
"doc": { 
    "recency": (DateTime.now().getMillis() - doc['maxdate'].value)/(24*60*60*1000) 
    } 
} 

ような何かをしようとしています。 (これはobviusly動作しません。)

を[EDIT]サンプル入力:

PUT /mystuff/1 
{ 
... 
    "maxdate": "2016-06-14", 
... 
} 

ESバージョン:2.3.4

答えて

1

あなたが複数のドキュメントを更新するためにElasticsearchで_update_by_query APIを使用する必要があります。その詳細についてはhereを読むことができます。

あなたのコードは次のよう

POST mystuff/_update_by_query 
{ 
    "script": { 
    "inline": "ctx._source.recency = (DateTime.now().getMillis() - DateTime.parse(ctx._source.maxdate).getMillis())/(24*60*60*1000)" 
    }, 
    "query": { 
    "match_all": { 
    } 
    } 
} 

にあなたが仕事に、このために有効にスクリプトをインラインスクリプトの更新を持つ必要があります変更されます。

+0

ニース! D –

+0

@VishalRaoその新しい実験的なAPIですが、私にとってはうまくいっていますが、それ以外の方法では完全なドキュメントを1つずつ更新することになります。 –

+0

ありがとうございました! ''メソッドのシグネチャはありません:java.lang.Long.minus()は引数型に適用できます:(java.lang.String)values:[2014-07-16] \ n可能な解:マイナス(java.lang.Character)、マイナス(java.lang.Number)、プラス(java.lang.String)、find()、min(long、long)、signum(long) "'どのようにそれを解決するための任意のアイデア? –