使用CURL进行Elasticsearch数据索引

时间:2014-11-24 12:16:19

标签: php indexing elasticsearch elasticsearch-plugin

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

2 个答案:

答案 0 :(得分:0)

你是什么意思,它正在跳过记录?你有一些超时? Elasticsearch正在使用Lucene,当Lucene获得新的和新的文档时,它必须不时地合并段(取决于索引编写器配置)。也许这会发生在你的情况下。

答案 1 :(得分:0)

索引是一个三步过程。

  1. 接受索引请求
  2. 刷新交易文件(索引)
  3. 刷新(重新创建搜索者,它的内部资料但刷新文档可用于搜索后,默认情况下设置为1)
  4. 在您的情况下,每一步都可能出现问题。例如,如果索引请求发送得太快,某些请求可能会被拒绝(但是您应该看到错误)。

    也许文档仍然在事务日志中(等待刷新而你没有看到它们)有一些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