gpt4 book ai didi

elasticsearch - 如何(暂时)阻止 Elasticsearch 删除已删除的文档?

转载 作者:行者123 更新时间:2023-12-02 22:16:13 28 4
gpt4 key购买 nike

my usecase我正在尝试同步两个 Elasticsearch 索引。由于版本控制,这实际上是 quite simple 。不过,我想在这样做的同时随时继续写作。

好的,我想按时间顺序执行的步骤:

  1. 客户端向集群 c1 写入(索引、删除、更新)
  2. 创建一个新索引 c2(客户端继续写入 c1)
  3. 将数据从集群 c1 复制到 c2(客户端不断写入 c1)
  4. 将客户端切换到 c2
  5. 同步从 c1 到 c2 的更改(客户端不断写入 c2)
  6. 关闭c1

第 5 步是我当前正在考虑的步骤。我必须确保写入 c2 的更改不会被 c1 中的数据覆盖。使用版本控制,写入相当简单,因为索引操作将失败(VersionConflictEngineException)。假设出现以下情况:

  1. 文档在 #3 之后立即在 c1 上更新(v2 在 c1 上,v1 在 c2 上)
  2. 同一文档在 #4 之后立即被删除(v2 在 c1 上,在 c2 上删除)
  3. 同步将尝试在 c2 上重新索引 v2

我知道elasticsearch会将已删除的文档保留一段时间:

# index document 1:4
$ curl -XPUT 'http://localhost:9200/test/test/1?version=4&version_type=external' -d '{"message": "test"}'
{"ok":true,"_index":"test","_type":"test","_id":"1","_version":4}

# delete document 1:6
$ curl -XDELETE 'http://localhost:9200/test/test/1?version=6&version_type=external'
{"ok":true,"found":true,"_index":"test","_type":"test","_id":"1","_version":6}

# index document 1:4 (ERROR!)
$ curl -XPUT 'http://localhost:9200/test/test/1?version=4&version_type=external' -d '{"message": "test"}'
{"error":"VersionConflictEngineException[[test][2] [test][1]: version conflict, current [6], provided [4]]","status":409}

# wait some time

# index document 1:4 (SUCCESS!)
$ curl -XPUT 'http://localhost:9200/test/test/1?version=4&version_type=external' -d '{"message": "test"}'
{"ok":true,"_index":"test","_type":"test","_id":"1","_version":4}

问题显然是“等待一段时间”部分。我将不得不在未知的时间内依赖已删除的文档。因此,我需要在运行 #5 时通过禁止删除已删除文档来控制这个时间。你会怎么做?

交叉发布到 Elasticsearch group (还有这个 related question )

最佳答案

“等待一段时间”部分由每个索引的 index.gc_deletes 设置定义,默认设置为“60s”。可以使用 Update Index Settings 动态更改它命令。

关于elasticsearch - 如何(暂时)阻止 Elasticsearch 删除已删除的文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17861268/

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