分词
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将返回错误
解决方案
- 业务不需要去做深度分页时,后端前端做限制
- 调整max_result_window的值
- 使用scroll