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



我需要更新或删除几个文档。

当我更新时,我会这样做:

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

此操作一直进行到点1不再返回结果为止。

当我删除时,我会这样做:

  1. 我首先搜索文档,为返回的结果设置了更大的限制(比如说,大小:10000)
  2. 我删除了发送到elasticsearch_id文档的所有找到的文档(10000个请求)

重复此操作,直到点1不再返回结果。

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

当我删除时,有没有一种方法可以同时发送多个ID来删除多个文档?

对于您的大规模索引/更新操作,如果您还没有使用它(不确定),您可以查看批量api文档。它是为这种工作量身打造的。

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

综上所述:

  • scroll api用于将结果加载到内存中,并能够有效地对其进行迭代
  • scan搜索类型禁用排序,成本高昂

尝试一下,根据数据量的不同,它可以提高批处理操作的性能。

对于删除操作,您可以使用相同的_bulk api一次发送多个删除操作。

每行的格式如下:

{ "delete" : { "_index" : "indexName", "_type" : "typeName", "_id" : "1" } }
{ "delete" : { "_index" : "indexName", "_type" : "typeName", "_id" : "2" } }

对于删除和更新,如果您想通过id删除或更新,可以使用批量api:

散装API

批量API使执行许多索引/删除操作成为可能在单个API调用中。这可以大大提高索引速度。

可能的操作包括索引、创建、删除和更新。索引和create-expect下一行有一个源,并且具有相同的语义作为标准索引API的op_type参数(即create将如果具有相同索引和类型的文档已经存在,则失败,而索引将根据需要添加或替换文档)。删去在以下行中不期望有源,并且具有相同的语义作为标准的删除API。更新要求doc、upstart和script及其选项将在下一行中指定。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-bulk.html

您也可以通过查询进行删除:

按查询删除API

按查询删除API允许从一个或多个中删除文档索引和基于查询的一个或多个类型。查询可以使用简单的查询字符串作为参数提供,或者使用查询请求正文中定义的DSL。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

最新更新