elasticsearch
4.20 航班飞行数据分析并生成可视化图表_哔哩哔哩_bilibili
4、ElasticSearch数据管理详解_哔哩哔哩_bilibili
多字段查询multi_match_哔哩哔哩_bilibili
POST _analyze
{
"analyzer":"standard",
"text":"我爱你中国"
}
POST _analyze
{
"analyzer":"ik_smart",
"text":"我爱你中国"
}
POST _analyze
{
"analyzer":"ik_smart_word",
"text":"我爱你中国"
}
put /test_index
{
"settings":{
"index":{
"analysis.analyzer.default.type":"ik_max_word"
}
}
}
GET _cat/nodes?v
#底层自带分词器
POST _analyze
{
"analyzer": "standard",
"text":"我爱你中国"
}
#索引创建、查询、删除
put /es_db
get /es_db
delete /es_db
#插入数据
put /es_db/_doc/1
{
"name":"张三1",
"sex":1,
"age":21,
"address":"苏州独墅湖公园",
"remark":"java developer"
}
put /es_db/_doc/2
{
"name":"张三2",
"sex":1,
"age":22,
"address":"苏州独墅湖公园",
"remark":"java developer"
}
put /es_db/_doc/3
{
"name":"张三3",
"sex":1,
"age":23,
"address":"苏州独墅湖公园",
"remark":"java developer"
}
put /es_db/_doc/4
{
"name":"张三4",
"sex":1,
"age":23,
"address":"苏州独墅湖公园",
"remark":"java developer"
}
get /es_db/_doc/1
DELETE /es_db/_doc/1
#put没有id会报错
put /es_db/_doc
{
"name":"张三",
"sex":1,
"age":24,
"address":"苏州独墅湖公园",
"remark":"java developer"
}
#post没有id会创建新的索引
post /es_db/_doc/1
{
"name":"张三123",
"sex":1,
"age":24,
"address":"苏州独墅湖公园",
"remark":"java developer"
}
#查询所有数据,7.X之前废弃,8.x直接移除
GET /es_db/_doc/_search
GET /es_db/_search
#等于
GET /es_db/_search?q=age:21
#大于
GET /es_db/_search?q=age:>21
#小于
GET /es_db/_search?q=age:<22
# 范围查询
GET /es_db/_search?q=age[21 TO 22]
#id集合查询
GET /es_db/_mget
{"ids":["1","2"]}
# 分页查询
GET /es_db/_search?q=age[21 TO 30]&from=0&size=1
#输出某些字段
GET /es_db/_search?_source=name,age
#排序 sor=字段: desc/asc
GET /es_db/_search?sort=age:desc
# 使用 keyword 子字段(精确匹配)
POST /es_db/_search
{
"query":{
"term":{
"name.keyword":"张三1"
}
}
}
GET /es_db/_mapping
# (精确匹配)
POST /es_db/_search
{
"query":{
"term":{
"name":"张三"
}
}
}
#标准分词器
POST /es_db/_search
{
"query":{
"term":{
"name":"张"
}
}
}
#改用 match 查询(自动分词)
POST /es_db/_search
{
"query": {
"match": {
"name": "张三"
}
}
}
GET /es_db/_search
# 多字段模糊匹配查询与精确查询 multi_match
put /es_db/_doc/5
{
"name":"张三5",
"sex":1,
"age":25,
"address":"友翔路",
"addresstwo":"石湖东路",
"remark":"java developer"
}
put /es_db/_doc/6
{
"name":"张三6",
"sex":1,
"age":23,
"address":"石湖东路118号",
"addresstwo":"友翔路",
"remark":"java developer"
}
put /es_db/_doc/6
{
"name":"张三6",
"sex":1,
"age":23,
"address":"石湖西路迎春东路",
"addresstwo":"友翔路",
"remark":"java developer"
}
# 多字段模糊匹配查询与精确查询 multi_match
POST /es_db/_search
{
"query": {
"multi_match": {
"query": "友",
"fields": ["address","addresstwo"]
}
}
}
#DSL范围查询
POST /es_db/_search
{
"query": {
"range": {
"age": {
"gte": 21,
"lte": 24
}
}
},
"from": 0,
"size":2,
"_source": ["name","age"],
"sort": [
{
"age": {
"order": "desc"
}
}
]
}
#自动映射
GET /es_db/_mapping
#静态映射
PUT /es_db_static
{
"mappings": {
"properties": {
"name": {
"type": "keyword",
"index": true,
"store": true
},
"sex": {
"type": "integer",
"index": true,
"store": true
},
"age": {
"type": "integer",
"index": true,
"store": true
},
"book": {
"type": "text",
"index": true,
"store": true
},
"address": {
"type": "text",
"index": true,
"store": true
}
}
}
}
#match all 查询
GET /es_db/_search
{
"query": {
"match_all": {}
},
"size": 10001,
"from": 0
}
#改数量20000
PUT /es_db/_settings
{
"index.max_result_window":"10000"
}
#除了返回前面2条记录,还返回了一个游标ID 值 scroll_id
GET /es_db/_search?scroll=1m
{
"query": {"match_all": {}},
"size": 2
}
#scroll_id 的值就是上一个请求中返回的_scroll_id的值
GET /_search/scroll
{
"scroll":"1m",
"scroll_id" : "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFmVITmJGSkdhUzRpcm1Iby03SHQybVEAAAAAApMDRhZ1bjBJUTU3cFE1U1RwWm5EckFYbnN3"
}
GET /es_db/_search
#改用 and 四个字必须有
POST /es_db/_search
{
"query": {
"match": {
"address": {"query": "石湖东路","operator": "and"}
}
}
}
# or 有一个字就满足
POST /es_db/_search
{
"query": {
"match": {
"address": "石湖东路"
}
}
}
#必须匹配两个以上
POST /es_db/_search
{
"query": {
"match": {
"address": {"query": "石湖东路","minimum_should_match": 2}
}
}
}
#bool
put /es_db_good
put /es_db_good/_doc/1
{
"name":"huaren 2026",
"desc":"huaren 2026 Description",
"brand":"HuaRen",
"price":"1000",
"type":"erji",
"transtime":"2025-01-01 16:00:00"
}
put /es_db_good/_doc/2
{
"name":"huawei 2026",
"desc":"huawei 2026 Description",
"brand":"HuaWei",
"price":"2000",
"type":"phone",
"transtime":"2025-01-01 16:00:00"
}
put /es_db_good/_doc/3
{
"name":"xiaomi 10",
"desc":"xiaomi 2026 Description",
"brand":"Xiaomi",
"price":"3000",
"type":"phone",
"transtime":"2025-01-01 16:00:00"
}
put /es_db_good/_doc/4
{
"name":"Hongmi 10",
"desc":"xiaomi 2026 Description",
"brand":"Xiaomi",
"price":"3100",
"type":"phone",
"transtime":"2025-01-01 16:00:00"
}
#bool must 子句,多条件查询同时满足, match大小写不区分
GET /es_db_good/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"brand": "xiaomi"
}
},
{
"range": {
"price": {
"gte": 3000,
"lte": 3010
}
}
}
]
}
}
}
#bool filter子句,多条件查询同时满足,score 是0分,并且结果会缓存
GET /es_db_good/_search
{
"query": {
"bool": {
"filter": [
{
"term": {
"type.keyword": "phone"
}
},
{
"range": {
"price": {
"gte": 1000,
"lte": 3000
}
}
}
]
}
}
}
#should子句
#条件1:name :Huawei Xiaomi
#OR
# 条件2:brand: xiaomi huawei
GET /es_db_good/_search
{
"query": {
"bool": {
"should": [
{
"match": {
"name": "huawei xiaomi"
}
},
{
"terms": {
"brand.keyword": ["HuaWei","Xiaomi"]
}
}
]
}
}
}
#Must Not子句 必须不能满足
#Must Not !(条件一 and 条件二)
GET /es_db_good/_search
{
"query": {
"bool": {
"must_not": [
{
"range": {
"price": {
"gte": 2000,
"lte": 3000
}
}
},
{
"term": {
"type.keyword":{"value":"phone"}
}
}
]
}
}
}
#bool term keyword都不会对大小写进行转换
GET /es_db_good/_search
{
"query": {
"bool": {
"must": [
{"term": {
"brand.keyword": "xiaomi"
}
}
]
}
}
}
PUT /employees/_bulk { "index" : { "_id" : "1" } } { "name" : "Emma", "age":32, "job":"Product Manager", "gender":"female", "salary":35000 } { "index" : { "_id" : "2" } } { "name" : "Underwood", "age":41, "job":"Dev Manager", "gender":"male", "salary":50000 } { "index" : { "_id" : "3" } } { "name" : "Tran", "age":25, "job":"Web Designer", "gender":"male", "salary":18000 } { "index" : { "_id" : "4" } } { "name" : "Rivera", "age":26, "job":"Web Designer", "gender":"female", "salary":22000 } { "index" : { "_id" : "5" } } { "name" : "Rose", "age":25, "job":"QA", "gender":"female", "salary":18000 } { "index" : { "_id" : "6" } } { "name" : "Lucy", "age":31, "job":"QA", "gender":"female", "salary":25000 } { "index" : { "_id" : "7" } } { "name" : "Byrd", "age":27, "job":"QA", "gender":"male", "salary":20000 }
范围分组
直方图
#桶聚合
#获取job的分类信息,text类型不推荐进行分组统计
POST /employees/_search
{
"query": {
"range": {
"salary": {
"gte": 10000
}
}
},
"size": 0,
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword",
"size": 5,
"order": {
"_count": "asc"
}
}
}
}
}
#指定size,不同工种种,年纪最大的3个员工具体信息
POST /employees/_search
{
"size": 0,
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword"
},
"aggs":{
"old_employee":{
"top_hits": {
"size": 1,
"sort":[{
"age": {"order": "desc"}
}]
}
}
}
}
}
}
#管道集合
#在员工数最多的工种里面,找出平均工资最低的工种
POST employees/_search
{
"size": 0,
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword",
"size": 5
},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
}
}
},
"min_salary_by_job":{
"min_bucket": {
"buckets_path": "jobs>avg_salary"
}
}
}
}
#平均工资的统计分析
POST employees/_search
{
"size": 0,
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword",
"size": 5
},
"aggs": {
"avg_salary": {
"avg": {
"field": "salary"
}
}
}
},
"stats_salary_by_job":{
"stats_bucket": {
"buckets_path": "jobs>avg_salary"
}
}
}
}