我需要更新或删除多个文档。
当我更新时,我这样做:
此操作发生,直到第1点不再返回结果。
当我删除时,我这样做:
重复此操作,直到第1点不再返回结果。
这是进行更新的正确方法吗?
当我删除时,有没有办法可以发送多个ID来一次删除多个文档?
答案 0 :(得分:5)
对于您的大量索引/更新操作,如果您已经(不确定)使用它,您可以查看bulk api documentation。它适合这种工作。
如果您想通过小批量检索大量文档,则应使用scan-scroll
搜索而不是from/size
。可以找到相关信息here。
总结一下:
scroll
api用于将结果加载到内存中,并能够有效地迭代它scan
搜索类型禁用排序,费用很高尝试一下,根据数据量,它可以提高批处理操作的性能。
对于删除操作,您可以使用相同的_bulk
api一次发送多个删除操作。
每行的格式如下:
{ "delete" : { "_index" : "indexName", "_type" : "typeName", "_id" : "1" } }
{ "delete" : { "_index" : "indexName", "_type" : "typeName", "_id" : "2" } }
答案 1 :(得分:1)
对于删除和更新,如果您想通过ID删除或更新,可以使用批量api:
批量API
批量API可以执行许多索引/删除操作 在单个API调用中。这可以大大提高索引速度。
可能的操作是索引,创建,删除和更新。指数和 在下一行创建期望源,并具有相同的语义 作为标准索引API的op_type参数(即create will 如果已存在具有相同索引和类型的文档,则失败 而索引将根据需要添加或替换文档。删除 不期望下一行的源,并具有相同的 语义作为标准删除API。更新期望部分 doc,upsert和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