2016-07-14 42 views
0

我試圖圍繞ES如何工作,但似乎並沒有成功。我希望它讀取JSON文件,並通過計算現有值的值來爲每個條目附加一個新屬性。這將是什麼語法?我似乎無法將文檔中的信息放在一起以使其正常工作。謝謝!Elasticsearch - 用批量計算拿起一個新房產

我試圖做類似

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

所有文檔/mystuff下。 (這obviusly不起作用。)

[編輯]樣品輸入:

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

ES版本:2.3.4

回答

1

你必須使用_update_by_query API通過Elasticsearch更新多個文檔。你可以閱讀更多關於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,但對我來說工作正常,另一種方式是逐個更新完整的文檔。 –

+0

謝謝!出於某種原因,我得到了'missing_method_error':''沒有方法簽名:java.lang.Long.minus()適用於參數類型:(java.lang.String)values:[2014-07-16] \ n可能的解決方案:minus(java.lang.Character),minus(java.lang.Number),plus(java.lang.String),find(),min(long,long),signum(long)「'。任何想法如何解決它? –