一、查询所有
1.构建一个查询请求
New searchrequest
2.设置查询条件
3.发送请求
4.解析结果
精确查询一般是查找keyword、数值、日期、boolean等类型字段,它不会对搜索条件分词。常见的有:
- term:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
- range:根据数值范围查询,可以是数值、日期的范围
二、相关度算分
es支持对搜索结果排序,默认是根据相关度算分(_score)来排序,可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等
排序sort在写法上和query平级
Asc正序 Desc倒序
三、分页
页码过大时,ES底层效率逐渐变低(内部优化:不能大于10000)
如果搜索页数过深,或者结果集(from + size)越大,对内存和CPU的消耗也越高,因此ES设定结果集查询的上限是10000
针对深度分页,ES目前提供了“search after”的方案,原理是从上一次的排序值开始,查询下一页数据
四、高亮
- 高亮是对关键字高亮,因此**搜索条件必须带有关键字,而不能是范围这样的查询
- 默认情况下,高亮的字段,必须与搜索指定的字段一致,否则无法高亮
五、分组统计
- 分组函数: group by
- 统计函数: sum、avg、max、min、count
桶(bucket)是按照某种方式对数据进行分组,每一组数据在ES中称为一个桶
根据词条内容、数值和日期范围分、日期阶梯、数值阶梯
度量(metrics)分组完成以后,我们一般会对组中的数据进行聚合运算,例如求平均值、最大、最小、求和等,这些在ES中称为度量