View on GitHub

个人笔记

SongPinru 的小仓库

ES优化思路:

  1. 少用复杂结构
  2. filters
    1. filter的原理根据倒排索引是对所有filter并行执行,然后取交集
    2. filter不是完全链式的执行,所以filter的顺序和写在哪没有任何影响
    3. filter命中doc越多(和key没关系),用的时间越长,所以范围尽量缩小
    4. 数值型的filter会比string类型的先执行(这一点要注意),数值型的会给string型的划范围,拼成了查找链
    5. 不写就不会去查索引,所以有时候写了反而会影响性能(比如上一条,如果数值命中的比string多,反而变慢了)
    6. filte可以缓存,查询往filter里放一份可以加速查询
    7. 没有filter很慢,至少有一个就快一些
    8. 父子文档不要filter
    9. 貌似不写type比较快,待验证,有几十ms的差距

ES的query会先选择一个命中doc最少的,其他的query在此之上并行然后取交集

filter只是缓存和不计算得分,其他和must一样,所以缓存的query尽量命中足够少,这样可以缓存更多数据,所以filter不是越多越好

filter缓存是单个的,不是一组,但是和条件强相关