我想了解更多关于弹性删除的知识,它是Java高级删除api &如果执行批量删除是可行的。
以下是配置信息
在我的例子中,每天大约有10K记录被添加到索引dev-answer
中。我想要触发删除操作(可以每天触发一次,或者一周一次,或者一个月一次),如果满足特定条件,基本上可以从上面的index
中删除所有文档。(我将在DeleteByQueryRequest
中给出)
对于delete,我指的是最新的文档中给出的api。
DeleteByQueryRequest request = new DeleteByQueryRequest("source1", "source2");
在阅读文档时,我遇到了一些我无法理解的查询。
It’s also possible to limit the number of processed documents by setting size. request.setSize(10);
中,处理文档意味着什么?会否只删除10份文件?request.setBatchSize(100);
它的性能是基于我们要删除多少个文档?
我是否应该先打个电话给get no of documents
&基于此,setBatchSize
应该被更改?request.setSlices(2);
切片应该取决于有多少核心执行器或没有在弹性机群中的核心?setSlices(2)
中找不到的方法org.elasticsearch.index.reindex.DeleteByQueryRequest
。我在这里错过了什么?发布于 2019-07-05 11:10:26
1.与doc一样:也可以通过设置大小来限制已处理文档的数量。request.setSize(10);处理文档意味着什么?会否只删除10份文件?
如果您还没有阅读search/_scroll
文档,那么您应该阅读这些文档。_delete_by_query
使用作为参数的查询执行滚动搜索。
size
参数对应于每次调用scroll
端点返回的文档数。如果有10个文档与查询匹配,大小为2,则elasticsearch将在内部执行5个search/_scroll
调用(即5个批),而如果将大小设置为5时,将只执行2个search/_scroll
调用。
不管size
参数,匹配查询的所有文档都将被删除,但它或多或少是高效的。
2.我应该设定什么批号?request.setBatchSize(100);它的性能取决于我们要删除多少文档?
setBatchSize()
方法等效于在查询中设置size
参数。您可以读取这篇文章来确定大小参数的正确值。
3.我是否应该先打个电话,不要得到任何文档&基于此,setBatchSize应该被更改?
你必须运行两次搜索请求才能得到被删除的文件的数量,我相信这是没有效率的。我建议你找到并坚持不变的价值。
4.切片应取决于弹性机群中有或没有芯芯执行器的数量?
片数应该从elasticsearch集群配置中设置。它还并行化了在碎片之间和碎片内部的搜索。
有关如何设置此参数的提示,您可以阅读文献资料。通常是索引的碎片数。
5.在文档中给出了在类org.elasticsearch.index.reindex.DeleteByQueryRequest.中找不到的setSlices(2)方法我在这里错过了什么?
您是对的,这可能是文档中的一个错误。我从未试过,但我相信你应该使用forSlice(TaskId slicingTask, SearchRequest slice, int totalSlices)
。
6.让我们考虑一下,如果我在异步模式下执行这个delete查询,需要0.5秒-1.0秒,同时如果我对这个索引执行get请求,它会出现一些异常吗?同样在同一时间,如果我插入了新的文档&检索相同的文档,它能给出响应吗?
首先,如文档中所述,_delete_by_query
端点创建索引的快照并处理此副本。
对于get
请求,这取决于文档是否已被删除。它永远不会发送异常,如果在哪里检索现有或不存在的文档,则只会得到相同的结果。请注意,除非在搜索查询中指定了sort
,否则不会确定文档的删除顺序。
如果在处理过程中插入(或更新)文档,_delete_by_query
端点将不考虑此文档,即使它与_delete_by_query
查询匹配。这是使用快照的地方。因此,如果您插入一个新文档,您将能够检索它。同样,如果更新现有文档,则如果文档已被删除或更新,但如果尚未删除,则将再次创建该文档。
顺便指出,被删除的文档仍然可以搜索(即使在delete_by_query
任务完成之后),直到发生refresh
操作为止。
_delete_by_query
不支持refresh
参数。在refresh
操作的文档中提到的refresh
引用了可以具有刷新参数的请求。如果要强制刷新,可以使用_refresh
端点。默认情况下,刷新操作每1秒进行一次。因此,一旦_delete_by_query
操作在最多1秒后完成,被删除的文档将无法搜索。
https://stackoverflow.com/questions/56900317
复制相似问题