ES是应用于大数据的搜索引擎。
特点:
快:Pb级别数据秒内响应
准:ES在旧版本中使用一种叫TF/IDF的评分算法作为默认的评分算法,从 7.x 之后,默认改为BM25评分算法
ES中,快怎么保证:
1、首先进行分词
2、倒排索引
倒排索引(fft)的原理(全文检索):
1、倒排索引由倒排表(posting list)、term dictionary(分词)、term index(分词编号)
其中倒排表是一个int数组,记录分词命中的条的id。分词无重复。
2、只需要一次查询就能得到含有次词频的所有列的id
倒排索引和正排索引的区别,倒排索引是一个词频有哪些条,正排索引是指一条有哪些词频
ES写入原理:
写入过程:
1、客户端发起写入请求
2、Memory Buffer 空间阈值、时间阈值(1s),每隔1秒创建Segment文件(倒排索引)并清空(refresh操作)
3、segment立马写入OS Cache,OS Cache响应将segment置为open
4、写入OS磁盘空间阈值、时间阈值(30分钟?)
Segment会定期进行merge的操作
OS Cache响应将segment置为open之后就可以查询了。
因为写入磁盘之前数据可能丢失,通过Translog保证数组完整性。
segment过多可能导致oom。可以吧1s调大。这个时间决定写入之后多久能查出来。
写入一致性策略:
由wait_for_active_shards 参数控制。默认值为1,一个节点写入成功就通知客户端。
ES调优
1、写入遵从低频高量原则,将Segment时间阈值调大(refresh_interval)、将Buffer阈值调大,减少segment数量从而减少merge次数。避免oom。
2、关闭副本,当写入大量数据过程中关闭副本,暂停搜索服务,或选在请求量谷值时间完成。(写入一致性策略会各个节点同步,消耗带宽)
3、禁用swap
4、设置 max_result_window参数,防止深度分页次数过多,保护JVM防止oom出现。这个参数设置要根据系统性能决定。