Elasticsearch
4.1 查表
4.1.1 1.查全部表名
GET /_cat/indices?index=*
4.1.2 2.根据关键字段查询表名
GET /_cat/indices?index=*perf*
4.1.3 3.查看表字段和所有信息[两种方法]
查询全部。就像select * from table_name一样。
GET /131_ops-web-perf_1/_search
GET zhifou/doc/_search
{
"query": {
"match_all": {}
}
}
4.2 查字段
4.2.1 1.根据字段查询
- 查询 fom 字段存在 gu 的用法
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
}
}
- 这种的 使用match_phrase
GET t1/doc/_search
{
"query": {
"match_phrase": {
"title": {
"query": "中国"
}
}
}
}
- 使用模糊搜索可以用match_phrase_prefix
GET t3/doc/_search
{
"query": {
"match_phrase_prefix": {
"desc": "bea"
}
}
}
4.2.2 2.多个字段中查询
使用must来限制两个字段(值)中必须同时含有关键字
GET t3/doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "beautiful"
}
},
{
"match": {
"desc": "beautiful"
}
}
]
}
}
}
4.2.3 小结:
- match:返回所有匹配的分词。
- match_all:查询全部。
- match_phrase:短语查询,在match的基础上进一步查询词组,可以指定
slop分词间隔。
4.3 排序查询
- 排序查询:sort
4.3.1 1.降序:desc
查询顾府都有哪些人,并根据age字段按照降序,并且,我只想看nmae和age字段:
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
结果的最下面会增加
"sort" : [
22
]
4.3.2 2.升序:asc
GET zhifou/doc/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"age": {
"order": "asc"
}
}
]
}
4.3.3 3.注意:
在排序的过程中,只能使用可排序的属性进行排序。那么可以排序的属性有哪些呢?
- 数字
- 日期
其他的都不行!
4.4 结果过滤:_source
在所有的结果中,我只需要查看name和age两个属性,其他的不要
GET zhifou/doc/_search
{
"query": {
"match": {
"name": "顾老二"
}
},
"_source": ["name", "age"]
}
4.5 聚合函数
聚合函数大家都不陌生,elasticsearch中也没玩出新花样,所以,这一章相对简单,只需要记得:
- avg
- max
- min
- sum
4.5.1 平均avg
需求是查询from是gu的人的平均年龄。
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"aggs": {
"my_avg": {
"avg": {
"field": "age"
}
}
},
"_source": ["name", "age"]
}
不想看都有哪些数据,只想看平均值怎么办?别忘了size!
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"aggs": {
"my_avg": {
"avg": {
"field": "age"
}
}
},
"size": 0,
"_source": ["name", "age"]
}
"size": 0 ---表示以上不展示
4.5.2 最大值max
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"aggs": {
"my_max": {
"max": {
"field": "age"
}
}
},
"size": 0
}
4.5.3 最小值min
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"aggs": {
"my_min": {
"min": {
"field": "age"
}
}
},
"size": 0
}
返回结果如下:
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 3,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"my_min" : {
"value" : 22.0
}
}
}
4.5.4 求和sum
年龄总和
GET zhifou/doc/_search
{
"query": {
"match": {
"from": "gu"
}
},
"aggs": {
"my_sum": {
"sum": {
"field": "age"
}
}
},
"size": 0
}
4.5.5 分组查询
查询所有人的年龄段,并且按照15~20,20~25,25~30分组,并且算出每组的平均年龄。
GET zhifou/doc/_search
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"age_group": {
"range": {
"field": "age",
"ranges": [
{
"from": 15,
"to": 20
},
{
"from": 20,
"to": 25
},
{
"from": 25,
"to": 30
}
]
}
}
}
}
在aggs的自定义别名age_group中,使用range来做分组,field是以age为分组,分组使用ranges来做,from和to是范围,我们根据需求做出三组。
对每个小组内的数据做平均年龄
GET zhifou/doc/_search
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"age_group": {
"range": {
"field": "age",
"ranges": [
{
"from": 15,
"to": 20
},
{
"from": 20,
"to": 25
},
{
"from": 25,
"to": 30
}
]
},
"aggs": {
"my_avg": {
"avg": {
"field": "age"
}
}
}
}
}
}
注意:聚合函数的使用,一定是先查出结果,然后对结果使用聚合函数做处理

浙公网安备 33010602011771号