我正在尝试使用没有批量索引器的 curl 将所有数据从我的数据库索引到 ES。我正在逐条记录数据索引。它工作正常,但是当数据增加到大约 80000 个或更多文档以上时,ES 开始跳过记录。跳过几条记录后,它再次开始工作,然后返回相同的行为......你对此有任何想法吗?
1 回答
索引是一个三步过程。
- 接受索引请求
- 刷新事务文件(索引)
- 刷新(重新创建搜索器,它是内部的东西,但在刷新文档后可用于搜索,默认设置为 1s)
在您的情况下,每一步都可能出现问题。例如,如果索引请求发送得太快,某些请求可能会被拒绝(但您应该会看到错误)。
也许文档仍在事务日志中(等待刷新而您看不到它们)有许多索引设置来调整此行为。您对以下设置感兴趣:
index.translog.flush_threshold_ops
何时根据操作刷新。index.translog.flush_threshold_size
何时根据 translog(字节)大小刷新。index.translog.flush_threshold_period
何时根据不冲水时间冲水。index.translog.disable_flush
禁用冲洗。注意,应设置为短时间间隔,然后启用。
正如我所说的,默认情况下每 1 秒刷新一次,但您可以在索引设置 ( index.refresh_interval
) 中进行设置。我通常在索引大量文档时禁用刷新以提高索引性能,有关详细信息,请参阅ElasticSerach 中的禁用刷新。
根据我的经验,ES 不会丢失您的文档,只是它们还不能用于搜索。我的同龄人经常抱怨同样的事情,我总是重复“等待 5 分钟再检查”,他们通常不会回来。
当 ElasticSearch 没有足够的内存时,它有时会做一些有线的事情。例如,它在索引文档中丢失了字段(我在 SO 上看到了这样的问题,解决方案是增加堆大小)。有关详细信息,请参阅ElasticSearch 配置 。