批量API中的语法错误

时间:2016-07-30 11:02:01

标签: elasticsearch

是否有任何参数可以让elasticsearch知道即使遇到错误也可以继续下一条记录?对于例如这工作正常。

DELETE /test

PUT /test

PUT /_bulk
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" }}
{ "field1" : "value1" }
{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }

get /test/type1/_search

如果语法错误,我宁愿跳过该行并加载下一行。在下面的例子中,即使ID 1由于额外的{第2行

而失败,我也会插入ID 3
PUT /_bulk
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" }}
{ "field1" : "value1" } {
{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }

1 个答案:

答案 0 :(得分:2)

Elasticsearch批量更新不会因操作错误而停止,但您遇到的问题是由 programmer 错误引起的。问题是,如果您的请求中存在语法错误,那么Elasticsearch无法解析您的请求。有关批量更新的文档 - Why the funny format?

  

Elasticsearch进入网络缓冲区,收到原始请求,并直接读取数据。它使用换行符来识别和解析小动作/元数据行,以便决定哪个碎片应该处理每个请求。

     

这些原始请求将直接转发到正确的分片。没有冗余的数据复制,没有浪费的数据结构。整个请求过程以尽可能少的内存处理。

如果某处存在语法错误,则无法识别操作/请求行。