ELK
1.NRT 近实时
2.Cluster
Term index FST
Term Dictionary
Term List Frame Of Reference
将拉链切分成blocks,每个block是256个docID,每个block单独使用上面的方式编码:Lucene计算一个block里要存储这些delta需要的空间,将这个信息加到block header,然后编码所有deltas。
咆哮位图
在filter cache中,Lucene需要编码一个int列表。这是一个很受欢迎的技术,可以加速频繁使用的过滤器。这是一个简单的cache。xxx。但是这个的约束跟倒排索引是不一样的:
- 因为我们只需要cache那些常用的filter,压缩率就显得没那么重要了
- 然而我们需要这些filter是比那些重复执行的filter要快,所以使用好的数据结构很重要
- cached filters是保存在内存的,倒排索引是典型的保存在磁盘的
首先根据数字的高16位把拉链切分成不同的块(block)。
这就意味着,第一个block我们会编码0-65535的值,第二个block是65536-131071,以此类推。
然后在每个block我们分别编码低16位:如果列表数量小于4096,我们会使用选项一(Integer array),否则使用bitmap。
需要注意的是,使用Integer array的时候每个值实际上我们一般需要4个byte。但是在这里我们只需要使用2个byte因为block ID已经说明了高16位是啥
优化
合并请求
-
bulk 批量索引, 更新,删除
-
多条搜索,多条获取
优化Lucene分段处理
- 刷新refresh 和冲刷 flush的频率
- segment合并策略
- 存储限流
缓存
- 过滤器缓存
- 分片查询缓存
- JVM 和操作系统缓存
- 预热器