【问题标题】:Elaticsearch data indexing using CURL使用 CURL 的 Elasticsearch 数据索引
【发布时间】:2015-01-22 03:45:57
【问题描述】:

我正在尝试使用没有批量索引器的 curl 将所有数据从我的 db 索引到 ES。我正在逐条记录数据索引。它工作正常,但是当数据增加到大约 80000 个或更多文档以上时,ES 开始跳过记录。跳过几条记录后,它再次开始工作,然后返回相同的行为...您对此有任何想法吗?

【问题讨论】:

  • 您是否收到任何错误消息?如果是,请张贴。另外:您使用的是 php-curl 还是命令行 curl?

标签: php indexing elasticsearch elasticsearch-plugin


【解决方案1】:

索引是一个三步过程。

  1. 接受索引请求
  2. 刷新事务文件(索引)
  3. 刷新(重新创建搜索器,它是内部的东西,但在刷新文档后可用于搜索,默认设置为 1s)

在您的情况下,每个步骤都可能出现问题。例如,如果索引请求发送得太快,某些请求可能会被拒绝(但您应该会看到错误)。

也许文档仍在事务日志中(等待刷新但您看不到它们)有许多 index settings 来调整此行为。您对以下设置感兴趣:

index.translog.flush_threshold_ops 何时根据操作刷新。 index.translog.flush_threshold_size 何时根据 translog(字节)大小刷新。 index.translog.flush_threshold_period 何时根据未刷新的时间进行刷新。 index.translog.disable_flush禁用冲洗。注意,应该设置一个短时间间隔然后启用。

正如我所说,默认情况下每 1 秒刷新一次,但您可以在索引设置中进行设置 (index.refresh_interval)。我通常在索引大量文档时禁用刷新以提高索引性能,请参阅disable refresh in ElasticSerach了解更多详细信息。

根据我的经验,ES 并没有丢失您的文档,只是它们还不能用于搜索。我的同龄人经常抱怨同样的事情,我总是重复“等待 5 分钟再检查”,他们通常不会回来。

ElasticSearch 有时会在内存不足时执行有线操作。例如,它丢失了索引文档中的字段(我在 SO 上看到了这样的问题,解决方案是增加堆大小)。详情请见ElasticSearch configuration

【讨论】:

  • 您正确解决了这个问题,但这是一个小问题,ES 正在跳过我的请求。我找到了。我检查了我的自定义日志,发现服务器在 CURL 请求后没有响应 true 或 false。它完全跳过了我的记录。暂时我在索引 10K 记录后使用了睡眠功能,现在它工作正常。我使用了 index.refresh_interval 但它对我不起作用。我仍在研究这个问题以寻求适当的解决方案。
  • 我想知道这是否只是 ElasticSearch 问题,或者可能是他们用于创建 API 的堆栈的问题。无论如何,如果您找到合适的解决方案,请告诉我们。
  • 嗨 Sebastian,提到的问题已在 ES 1.4 中修复,但它是 Beta 版。 wait_if_ongoing 使用此链接elasticsearch.org/guide/en/elasticsearch/reference/current/…
猜你喜欢
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2012-01-26
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多