我正在使用curl使用批量API将apache logrows作为文档添加到elasticsearch。我发布以下内容:
{"index": {"_type": "apache", "_id": "123", "_index": "apache-2017-01"}}
{"s": 200, "d": "example.se", "@t": "2017-01-01T00:00:00.000Z", "p": "/foo"}
{"index": {"_type": "apache", "_id": "124", "_index": "apache-2017-01"}}
{"s": 200, "d": "example.se", "@t": "2017-01-01T00:00:00.000Z", "p": "/bar"}
... more of the same ...
我的猜测是,对于每个logrow文档行,lucene索引都会更新它的索引。但我不需要弹性搜索来做到这一点。我首先添加所有 logrow文档,然后更新索引。
这可能吗?这是一个很好的idé?它是否可以显着提高性能?
答案 0 :(得分:0)
你的直觉离真相并不遥远。默认情况下,ElasticSearch will update its index every second:
默认index.refresh_interval为1s,强制使用Elasticsearch 每秒创建一个新的细分。增加这个价值(比方说, 30s)将允许更大的段冲洗并减少未来的合并 压力。
因此,增加索引吞吐量的方法之一是增加此index.refresh_interval
,甚至可能增加到无穷大,然后在完成插入后将其重新打开。 (请注意,插入的文档仅在段关闭后才可用于搜索,即写入已完成。)
然而,这不是将文档插入ElasticSearch时唯一可能的瓶颈。例如,您可以考虑使用多个线程批量插入文档,或者在ElasticSearch文档的Tune for index speed部分中描述的其他调整。您可以在Dynamic Index Settings部分中查找可能要更改的其他索引参数。
希望有所帮助!