以下是弹性搜索文档提供的批量插入示例:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html
POST _bulk
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_type" : "type1", "_id" : "2" } }
{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_type" : "type1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
他们提到了"因为这种格式使用文字\ n作为分隔符,所以请确保JSON操作和来源不是很漂亮"。
我想知道这种输入格式背后的原因,为什么他们不选择JSON对象数组呢。
例如:
POST _bulk
[{{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }},
{ "delete" : { "_index" : "test", "_type" : "type1", "_id" : "2" } }
{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_type" : "type1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }]
上述结构不正确但是类似的东西 在REST API开发标准中,我是否缺少常见的东西?分隔符而不是数组?
答案 0 :(得分:1)
这允许Bulk端点一个接一个地处理主体。如果它是一个JSON数组,ES必须加载并解析整个JSON主体到内存中,以便一个接一个地提取一个数组元素。
知道批量主体可能非常大(即数百MB),这是一种优化,可以防止您的ES服务器在发送大量批量请求时崩溃。