gpt4 book ai didi

elasticsearch - Elastic Search delete_by_query 如何工作?当我们插入新数据并在删除文档时检索相同数据时会发生什么?

转载 作者:行者123 更新时间:2023-11-29 02:52:18 31 4
gpt4 key购买 nike

我想了解更多关于弹性删除的信息,它是 Java 高级删除 API 和天气,可以执行批量删除。

以下是配置信息

  • java :8
  • 弹性版本:7.1.1
  • 添加了弹性依赖项:
    <dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.1.1</version>
    </dependency>

    <dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>7.1.1</version>
    </dependency>

  • 就我而言,每天大约有 10K 条记录被添加到索引中 dev-answer .
    我想触发删除操作(这可以每天或每周或每月触发一次),它基本上会删除上面的所有文件 index如果满足特定条件。 (我会在 DeleteByQueryRequest 中给出)

    对于删除,最新的 doc 中给出了一个 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 .我在这里缺少什么?
  • 让我们考虑一下我是否在异步模式下执行这个删除查询需要 0.5-1.0 秒,同时如果我在这个索引上执行 get 请求,它会给出一些异常吗?
    同样在同一时间,如果我插入新文档并检索相同的文档,它是否能够给出响应?
  • 最佳答案

    1.如doc:也可以通过设置大小来限制处理文档的数量。请求.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查询中的参数。您可以阅读 this article确定大小参数的正确值。

    3. 我是否应该首先调用以获取没有文档并基于应更改 setBatchSize 的内容?

    您必须运行两次搜索请求才能获取已删除文档的数量,我相信这不会有效率。我建议你找到并坚持一个恒定的值。

    4.切片应该取决于执行器机器有多少个核心或弹性集群中没有核心?

    切片数量应从 elasticsearch 集群配置中设置。它还可以并行化分片之间和分片内的搜索。

    您可以阅读 the documentation有关如何设置此参数的提示。通常是索引的分片数。

    5. 在文档中,我无法在类 org.elasticsearch.index.reindex.DeleteByQueryRequest 中找到 setSlices(2) 方法。我在这里缺少什么?

    您是对的,这可能是文档中的错误。我从未尝试过,但我相信你应该使用 forSlice(TaskId slicingTask, SearchRequest slice, int totalSlices) .

    6. 让我们考虑一下我是否在异步模式下执行这个删除查询需要 0.5-1.0 秒,同时如果我在这个索引上执行 get 请求,它会给出一些异常吗?同样在同一时间,如果我插入新文档并检索相同的文档,它是否能够给出响应?

    首先,如文档中所述,_delete_by_query端点创建索引的快照并处理此副本。

    对于 get请求,这取决于文档是否已被删除。它永远不会发送异常,如果您检索现有或不存在的文档,您将获得相同的结果。请注意,除非您指定 sort在搜索查询中,文档的删除顺序是不确定的。

    如果在处理过程中插入(或更新)一个文档,_delete_by_query 将不会考虑该文档。端点,即使它匹配 _delete_by_query询问。这是使用快照的地方。因此,如果您插入一个新文档,您将能够检索它。同样,如果您更新现有文档,则如果该文档已被删除或更新,则将再次创建该文档,如果尚未删除,则不会删除。

    作为旁注,删除的文档仍然可以搜索(即使在 delete_by_query 任务完成之后),直到 refresh 发生了操作。
    _delete_by_query不支持refresh范围。 request returnrefresh 的文档中提到操作是指可以具有刷新参数的请求。如果要强制刷新,可以使用 _refresh 端点。默认情况下,刷新操作每 1 秒发生一次。所以一旦_delete_by_query最多1秒后操作完成,删除的文档将无法搜索。

    关于elasticsearch - Elastic Search delete_by_query 如何工作?当我们插入新数据并在删除文档时检索相同数据时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56900317/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com