是否有任何参数可以让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 3PUT /_bulk
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" }}
{ "field1" : "value1" } {
{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }
答案 0 :(得分:2)
Elasticsearch批量更新不会因操作错误而停止,但您遇到的问题是由 programmer 错误引起的。问题是,如果您的请求中存在语法错误,那么Elasticsearch无法解析您的请求。有关批量更新的文档 - Why the funny format?:
Elasticsearch进入网络缓冲区,收到原始请求,并直接读取数据。它使用换行符来识别和解析小动作/元数据行,以便决定哪个碎片应该处理每个请求。
这些原始请求将直接转发到正确的分片。没有冗余的数据复制,没有浪费的数据结构。整个请求过程以尽可能少的内存处理。
如果某处存在语法错误,则无法识别操作/请求行。