ElasticSearch的初步检索和进阶检索
ES支持两种基本方式检索:
一个是通过使用 REST request URI来发送搜索参数(uri + 检索参数)
GET bank/_search?q=*&sort=account_num:asc
另一个是通过 REST request body 来发送他们 (uri + 请求体)
GET bank/_search { "query":{ "match_all":{} }, "sort":[ { "balance":{ "order":"desc" } } ], "from":0, "size":5, "_source":["balance","firstname"] }
1、match_all :查询所有
GET bank/_search { "query":{ "match_all"{} }, "sort":[ { "balance":{ "order":"desc" } } ], "from":0, "size":5, "_source":["balance","firstname"] }
2、match查询
全文检索会按照评分进行排序,会对检索条件进行分词匹配
GET bank/_search { "query": { "match": { "address": "kings" } } }
3、match_phrase 【短语匹配】
将需要匹配的值,当成一个整体单词(不分词)进行检索
GET bank/_search { "query": { "match_phrase": { "address": "mill lane" } } }
4、multi_match 【多字段匹配】
也是分词查询
// 查询 adress或者city中包含 mill的数据 GET bank/_search { "query": { "multi_match": { "query": "mill", "fields": ["address","city"] } } }
5、filter
只用于对数据进行过滤,不会计算相关性得分
GET bank/_search { "query": { "bool": { "filter": { "range": { "age": { "gte": 10, "lte": 20 } } } } } }
6、term 查询
和match一样。匹配某个属性的值。全文检索用match,其他非text字段匹配用term
GET /bank/_search { "query": { "term": { "balance": { "value": "32838" } } } }
7、aggregation (执行聚合)
聚合提供了从数据中分组和提取数据的能力。最简单的聚合大致等于SQL的聚合函数。
在ElasticSearch中,你有执行搜索返回hit,并且同时返回聚合结果,把一个响应中所有hits分隔开的
能力,这是非常强大且有效的。您可以执行查询和多个聚合并且在一次使用中得到各自的返回结果,使用一次简介和简化的api来避免网络往返
语法:
"aggregations" : { "<aggregation_name>" : { //聚合名称 "<aggregation_type>" : { //聚合类型 <aggregation_body> //聚合体 } [,"meta" : { [<meta_data_body>] } ]? [,"aggregations" : { [<sub_aggregation>]+ } ]? }, "<aggregation_name_2>" : { ... }, "<aggregation_name_3>" : { ... } .... }
需求:
1)搜索address中包含mail的所有人的年龄和平均年龄,但不显示这些人的详情
GET bank/_search { "query": { "match": { "address": "mill" } }, "aggs": { "ageagg": { "terms": { "field": "age", "size": 10 } }, "ageavg":{ "avg": { "field": "age" } }, "balanceavg":{ "avg": { "field": "balance" } } } }
2)按照年龄聚合,并求这些年龄段的人的平均薪资
(聚合里面套聚合)
GET bank/_search { "query": { "match_all": {} }, "aggs": { "ageagg": { "terms": { "field": "age", "size": 10 }, "aggs": { "ageBalanceAvg": { "avg": { "field": "balance" } } } } } }
3)查出所有的年龄分布,并且这些年龄段中M的平均薪资和F的平均薪资,以及这个年龄段总体的平均薪资
GET bank/_search { "query": { "match_all": {} }, "aggs": { "agegg": { //聚合年龄 "terms": { "field": "age", "size": 100 }, "aggs": { "genderagg":{ //在年龄的聚合结果上聚合性别 "terms": { "field": "gender.keyword", "size": 2 }, "aggs": { "balanceagg": { //xx岁 M性别的平均薪资 "avg": { "field": "balance" } } } }, "agebalanceaavg":{ //xx岁的平均薪资 "avg": { "field": "balance" } } } } } }