2016-07-14 30 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)“'。任何想法如何解决它? –