个人笔记
SongPinru 的小仓库
ES优化思路:
- 少用复杂结构
- filters
- filter的原理根据倒排索引是对所有filter并行执行,然后取交集
- filter不是完全链式的执行,所以filter的顺序和写在哪没有任何影响
- filter命中doc越多(和key没关系),用的时间越长,所以范围尽量缩小
- 数值型的filter会比string类型的先执行(这一点要注意),数值型的会给string型的划范围,拼成了查找链
- 不写就不会去查索引,所以有时候写了反而会影响性能(比如上一条,如果数值命中的比string多,反而变慢了)
- filte可以缓存,查询往filter里放一份可以加速查询
- 没有filter很慢,至少有一个就快一些
- 父子文档不要filter
- 貌似不写type比较快,待验证,有几十ms的差距
ES的query会先选择一个命中doc最少的,其他的query在此之上并行然后取交集
filter只是缓存和不计算得分,其他和must一样,所以缓存的query尽量命中足够少,这样可以缓存更多数据,所以filter不是越多越好
filter缓存是单个的,不是一组,但是和条件强相关