ElasticSearch的API, DSL查询语句
文章目录
- ElasticSearch的API, DSL查询语句
- 一、保存数据
-
- 1.新增数据
- 2.更新操作
- 3.更新的同时增加属性
- 4.批量操作
- 二、查询数据
-
- 1.查询DSL
- 2.返回部分字段
- 3.match精确匹配查询
- 4.字符串,多个单词(分词+全文检索):
- 5.将需要匹配的值当成一个整体单词(不分词)进行检索
- 6.multi_match【多字段匹配】state或者address包含mill
- 7.bool复合查询: 查出address是 MILL且是男性的
- 8.should:应该达到should列举的条件,如果达到会增加相关文档的评分,并不会改变 查询的结果
- 9.filter【结果过滤】:过滤出balance在18000~20000之间
- 10. 全文检索字段用 match,其他非 text 字段匹配用 term
- 三、aggregations(聚合)
-
-
- (最简单的聚合方法大致等于SQL GROUP BY 和 SQL 聚合函数)
- 1. 先查出address中包含mill的, 在聚合分析出年龄分布, 以及年龄的平均值, size:0表示只显示聚合结果ageAgg表示这次聚合的名字, terms是聚合的类型
- 2. 先按照年龄聚合, 再计算每个年龄段的人的平均薪资
- 3. 查出所有年龄分布,以及这些年龄段中男性的平均薪资和女性的平均薪资以及这个年龄 段的总体平均薪资
- 四、Mapping 是用来定义一个文档(document),以及它所#包含的属性(field)是如何存储和 索引的
-
- 1. 创建索引并指定映射
- 2. 添加新的字段映射
- 3. 更新映射(对于已经存在的映射字段,我们不能更新。更新必须创建新的索引进行数据迁移)
一、保存数据
1.新增数据
#增加数据:
POST users/_doc
{
"name":"redis",
"age":29,
"sex": "男"
}
#带主键, 如果主键不存在,则插入;反之,则更新
POST users/_doc/1
{
"name": "张三",
"age": 20,
"sex": "男"
}
2.更新操作
POST users/_doc/1
{
"name": "John Doe2"
}
POST users/_update/1
{
"doc": {
"name": "张益达"
}
}
PUT users/_doc/1
{
"name": "张大炮"
}
3.更新的同时增加属性
POST users/_update/1
{
"doc": {
"name": "Jane Doe",
"city": "北京",
"age": 20
}
}
4.批量操作
POST users/_doc/_bulk
{"index":{"_id":"1"}}
{"name":"John Doe"}
{"index":{"_id":"2"}}
{"name":"Jane Doe"}
二、查询数据
1.查询DSL
GET bank/_search
{
"query": {
"match_all": {}
},
"from": 0,
"size": 3,
"sort": [
{
"account_number": {
"order": "asc"
}
}
]
}
2.返回部分字段
GET bank/_search
{
"query": {
"match_all": {}
},
"_source": ["age", "balance", "firstname"]
}
3.match精确匹配查询
GET bank/_search
{
"query": {
"match": {
"account_number": "20"
}
}
}
4.字符串,多个单词(分词+全文检索):
GET bank/_search
{
"query": {
"match": {
"address": "mill road"
}
}
}
5.将需要匹配的值当成一个整体单词(不分词)进行检索
GET bank/_search
{
"query": {
"match_phrase": {
"address": "mill road"
}
}
}
6.multi_match【多字段匹配】state或者address包含mill
GET bank/_search
{
"query": {
"multi_match": {
"query": "625",
"fields": [
"account_number",
"address"
]
}
}
}
7.bool复合查询: 查出address是 MILL且是男性的
GET bank/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "MILL"
}
},
{
"match": {
"gender": "M"
}
}
]
}
}
}
8.should:应该达到should列举的条件,如果达到会增加相关文档的评分,并不会改变 查询的结果
GET bank/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "MILL"
}
},
{
"match": {
"gender": "M"
}
}
],
"should": [
{
"match": {
"address": "lane"
}
}
]
}
}
}
9.filter【结果过滤】:过滤出balance在18000~20000之间
GET bank/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"address": "Street"
}
}
],
"filter": {
"range": {
"balance": {
"gte": 18000,
"lte": 20000
}
}
}
}
},
"from": 0,
"size": 50
}
10. 全文检索字段用 match,其他非 text 字段匹配用 term
GET bank/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"age": {
"value": "28"
}
}
},
{
"match": {
"address": "990"
}
}
]
}
}
}
三、aggregations(聚合)
(最简单的聚合方法大致等于SQL GROUP BY 和 SQL 聚合函数)
1. 先查出address中包含mill的, 在聚合分析出年龄分布, 以及年龄的平均值, size:0表示只显示聚合结果ageAgg表示这次聚合的名字, terms是聚合的类型
GET bank/_search
{
"query": {
"match": {
"address": "mill"
}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 10
}
},
"avg_agg": {
"avg": {
"field": "age"
}
}
},
"size": 0
}
2. 先按照年龄聚合, 再计算每个年龄段的人的平均薪资
GET bank/_search
{
"query": {
"match_all": {}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 1000,
"order": {
"_key": "asc"
}
},
"aggs": {
"balanceAgg": {
"avg": {
"field": "balance"
}
}
}
}
}
}
3. 查出所有年龄分布,以及这些年龄段中男性的平均薪资和女性的平均薪资以及这个年龄 段的总体平均薪资
GET bank/_search
{
"query": {
"match_all": {}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 100,
"order": {
"_key": "asc"
}
},
"aggs": {
"genderAgg": {
"terms": {
"field": "gender.keyword",
"size": 100
},
"aggs": {
"balanceAvg": {
"avg": {
"field": "balance"
}
}
}
},
"balanceAvg": {
"avg": {
"field": "balance"
}
}
}
}
}
}
四、Mapping 是用来定义一个文档(document),以及它所#包含的属性(field)是如何存储和 索引的
1. 创建索引并指定映射
GET my_index/_mapping
PUT my_index
{
"mappings": {
"properties": {
"age": {
"type": "integer"
},
"email": {
"type": "keyword"
},
"name": {
"type": "text"
}
}
}
}
2. 添加新的字段映射
PUT my_index/_mapping
{
"properties": {
"employee-id": {
"type": "keyword",
"index": false
}
}
}
3. 更新映射(对于已经存在的映射字段,我们不能更新。更新必须创建新的索引进行数据迁移)
#source源索引数据, dest目标索引
POST _reindex
{
"source": {
"index": "users"
},
"dest": {
"index": "userman"
}
}