我想弄清楚为什么elasticsearch在索引方面这么慢。我不确定它是否是对弹性搜索本身的限制,但我将分享到目前为止我所拥有的。
我有一个弹性搜索节点和一个在框上运行的logstash实例。我的文档有大约15个字段,我有一个弹性搜索映射设置与正确的类型(虽然我尝试没有映射,得到几乎相同的结果)。
我一次索引大约800万到1000万个事件,并采取了以下方法。
使用以下格式的批量api(我将csv转换为JSON并将其放入我卷曲的文件中
{"create" : {}}
{"field1" : "value1", "field2" : "value2 .... }
{"create" : {}}
{"field1" : "value1", "field2" : "value2 .... }
{"create" : {}}
{"field1" : "value1", "field2" : "value2 .... }
我还尝试使用tcp输入和原始csv或者使用文件监听器来使用logstash,并将csv写入文件logstash正在监听的文件末尾。
所有这三种方法似乎每秒摄取大约10,000个事件,这非常慢。
我做错了吗?我是否应该在批量摄取中明确指定ID而不是让它自动生成一个?
通过批量API进行摄取时,我将事件分为50,000和100,000个事件文件,并分别单独摄取。
答案 0 :(得分:7)
我推荐这个blog。在批量索引期间调整以下参数应该有所帮助,但是一旦完成,请减少refresh_interval。
index.store.type: mmapfs
indices.memory.index_buffer_size: 30%
index.translog.flush_threshold_ops: 50000
refresh_interval: 30s
答案 1 :(得分:1)
你会发现我对这个here做了一些研究,你可以下载Indexing Scripts文件,这里有一些有用的脚本来最大化索引性能。它确实因硬件和Elasticsearch的索引优化而有所不同。即删除副本节点等。
希望这对你有所帮助。