如何使用Elasticsearch处理多个更新/删除?

Mar*_*ger 2 bulkinsert elasticsearch bulkupdate elasticsearch-bulk-api

我需要更新或删除几个文件.

当我更新时,我这样做:

  1. 我首先搜索文档,为返回的结果设置更大的限制(比方说,大小:10000).
  2. 对于每个返回的文档,我修改了某些值.
  3. 我对弹性搜索整个修改后的列表(批量索引)表示不满.

此操作发生,直到第1点不再返回结果.

当我删除时,我这样做:

  1. 我首先搜索文档,为返回的结果设置更大的限制(比方说,大小:10000)
  2. 我删除发送到elasticsearch _id文档的每个找到的文件(10000个请求)

重复此操作直到第1点不再返回结果.

这是进行更新的正确方法吗?

当我删除时,有没有办法可以一次发送多个ID来删除多个文件?

Tho*_*asC 5

对于大规模的索引/更新操作,如果您不使用它(不确定),您可以查看批量api文档.它专为这种工作量身定制.

如果要通过小批量检索大量文档,则应使用scan-scroll搜索而不是使用from/size.相关信息可在此处找到.

总结一下 :

  • scroll api用于将结果加载到内存中,并能够有效地迭代它
  • scan 搜索类型禁用排序,这是昂贵的

试一试,根据数据量,它可以提高批处理操作的性能.

对于删除操作,您可以使用此相同的_bulkapi一次发送多个删除操作.

每行的格式如下:

{ "delete" : { "_index" : "indexName", "_type" : "typeName", "_id" : "1" } }
{ "delete" : { "_index" : "indexName", "_type" : "typeName", "_id" : "2" } }
Run Code Online (Sandbox Code Playgroud)