Elasticsearch学习记录(DSL查询)
1.叶子查询
-
介绍:一般是在特定的字段里查询特定的值,属于简单查询,很少单独使用
-
1.1.全文检索
-
介绍:利用分词器对用户输入内容进行分词,然后去词条列表中匹配
-
match_query
GET /items/_search { "query":{ "match":{ "name":"脱脂牛奶" } } }
-
multi_match_query
GET /items/_search { "query":{ "multi_match":{ "query":"脱脂牛奶", "fields":["name","info"] } } }
-
-
1.2.精准查询
-
介绍:不对用户内容进行分词,直接精确匹配,一般查找keyword、数值、日期、布尔等类型
-
ids
GET /items/_search { "query":{ "ids":{ "values":["1","2","3"] } } }
-
range
GET /items/_search { "query":{ "range":{ "price":{ "gte":10, "lte":20 } } } }
-
term
GET /items/_search { "query":{ "term":{ "name":{ "value":"脱脂牛奶" } } } }
-
-
1.3.地理查询
-
介绍:用于搜索地理位置,搜索方式较多
-
常见用法:geo_distance、geo_bounding_box等
-
2.复合查询
-
介绍:以逻辑方式组合多个叶子或者更改叶子查询的行为方式
-
2.1.bool(布尔查询)
- 介绍:基于逻辑运算组合叶子查询,实现组合条件
示例代码
GET /items/_search { "query":{ "bool":{ "must":[ {"match": {"name" : "手机"}} ], "should":[ {"term": {"brand" : {"value" : "vivo"} } }, {"term": {"brand" : {"value" : "小米"} } } ], "must_not":[ {"range": {"price" : {"gte" : 2500} } } ], "filter":[ {"range": {"price" : {"lte" : 1000} } } ] } } }
-
2.2.相关性算法
-
介绍:基于逻辑运算组合叶子查询,实现组合条件
-
常见用法:function_score、dis_max等
-
3.排序分页
-
3.1.排序
- 介绍:es支持对搜索结果排序,默认根据相关度算分(_score)来排序,也可以指定排序字段。可排序的字段类型有:keyword、数值、地理坐标、日期。
示例代码
GET /items/_search { "query": { "match_all":{} }, "sort": [ { "sold" : "desc" }, { "price" : "asc" } ] }
-
3.2.分页
- 介绍:es默认情况下只返回top10的数据,如果要查询更多数据就需要修改分页参数,es中通过修改from、size参数来控制要返回的分页结果。
示例代码
GET /items/_search { "query": { "match_all":{} }, "from": 0, "size": 10, "sort": [ { "price" : "asc" } ] }
4.高亮显示
-
介绍:高亮显示就是在搜索结果中把搜索关键字突出显示
示例代码
GET /items/_search { "query": { "match":{ "name" : "脱脂牛奶" } }, "highlight": { "fields" : { "name" : { "pre_tags" : "<em>" "post_tags" : "</em>" } } } }
-
注意:不需要指定标签,默认标签就是
5.聚合
-
介绍:聚合可以实现对文档数据的统计、分析、运算
-
5.1.桶聚合
-
介绍:用来对文档进行分组
-
5.1.1.TermAggregation:按照文档字段值分组
-
代码示例
-
5.1.2.Date Histogram:按照日期阶梯分组,如一周为一组、一个月为一组
-
-
5.2.度量聚合
-
介绍:用以计算一些值,如最大最小值、平均值
-
常见用法:Avg、Max、Min、Stas
-
-
5.3.管道聚合
-
介绍:以其他聚合的结果为基础做聚合
-
代码示例
-