ElasticSearch批量插入/更新操作

dim*_*zak 14 elasticsearch

我不确定我是否正确使用upsert批量索引中的操作.

我的要求是:

{ "update": {"_id": "610946100"}}\n
{"doc": {"id":"610946100","uri":"/0/0/1/6/4/0/610946100.xml"}, "doc_as_upsert" : true}\n
Run Code Online (Sandbox Code Playgroud)

和网址是: http://localhost:9200/anIndex/aType/_bulk

我想我在文档中遗漏了一些内容,但我仍然无法找到如何进行此操作.

我想要的是在索引中创建上述文档或更新它(如果存在).

dch*_*har 26

如果您通过批量API在索引中添加记录

{ "create": {"_id": "someId"}}\n
{"id":"someId","uri":"/0/1/3/2/1/0511912310/511912310.xml"}\n
Run Code Online (Sandbox Code Playgroud)

那么如果id已存在于索引中,您将获得异常.如果要添加或替换文档(取决于是否存在),您应该将请求作为

{ "index": {"_id": "someId"}}\n
{"id":"someId","uri":"/0/1/3/2/1/0511912310/511912310.xml"}\n
Run Code Online (Sandbox Code Playgroud)

如果已存在具有相同索引和类型的文档,则create将失败,而index将根据需要添加或替换文档

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html版本5.3


Pai*_*ook 5

我看到的唯一要求与批量文档之间的区别是示例具有在update操作中定义的索引和类型。因此,基于此,我将尝试添加如下所示的值。

{"update": {"_id": "610946100", "_type": "aType", "_index": "anIndex"}}\n
{"doc": {"uri":"/0/0/1/6/4/0/610946100.xml"}, "doc_as_upsert" : true}\n
Run Code Online (Sandbox Code Playgroud)

另外,由于您是_id在update命令中指定文档的,因此我将从部分文档中将其删除,或将其标记为_id。(您缺少下划线)