我正在尝试将所有数据从我的数据库索引到ES,使用curl而不使用批量索引器。我按记录索引数据记录。它的工作正常但是当数据增加到大约80000或更多文档时,ES开始跳过记录。跳过几条记录后,它再次开始工作,然后返回相同的行为......你对此有什么想法吗?
答案 0 :(得分:0)
你是什么意思,它正在跳过记录?你有一些超时? Elasticsearch正在使用Lucene,当Lucene获得新的和新的文档时,它必须不时地合并段(取决于索引编写器配置)。也许这会发生在你的情况下。
答案 1 :(得分:0)
索引是一个三步过程。
在您的情况下,每一步都可能出现问题。例如,如果索引请求发送得太快,某些请求可能会被拒绝(但是您应该看到错误)。
也许文档仍然在事务日志中(等待刷新而你没有看到它们)有一些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。