ES踩坑

分词

ik分词器

查看字段的分词情况

GET /${index}/${type}/${id}/_termvectors?fields=${fields_name}

大小写

包含英文字母的值建立索引时,默认会把大写转成小写,但是值还是大写,匹配需要用小写

逗号分词

数字间不能直接用英文逗号进行分词,考虑其他分词方案,这里最后使用逗号+空格分词

查询

term&match&filter

term

完全匹配查询,查询条件不会分词,查询条件和对应字段的分词结果对应时才会取出来

match

模糊匹配查询,查询条件会分词,查询条件的分词结果和对应字段的分词结果对应时才会取出来

filter

过滤匹配查询,完全匹配,与term的区别在于它不会评分,并且有缓存功能,所以filter比较快

深度分页

es默认采用的分页方式是 from+ size 的形式,在深度分页的情况下,这种使用方式效率是非常低的,比如from = 5000, size=10,es需要在各个分片上匹配排序并得到5000+10条有效数据,然后在结果集中取最后10条;
除了效率问题,还有一个无法解决的问题是,es目前支持最大的skip值是max_result_window,默认为 10000 。也就是当 from + size > max_result_window 时,es将返回错误

解决方案

  1. 业务不需要去做深度分页时,后端前端做限制
  2. 调整max_result_window的值
  3. 使用scroll
原文地址:https://www.cnblogs.com/yks43/p/14347030.html