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":"我爱你中国"
}
#索引创建、查询、删除
delete /es_db
put /es_db
get /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
{
"name":"张三123",
"sex":1,
"age":24,
"address":"苏州独墅湖公园",
"remark":"java developer"
}
#全量覆盖
put /es_db/_doc/1
{
"name":"张三1",
"sex":1,
"age":21,
"address":"苏州独墅湖公园",
"remark":"java developer"
}
#put全量覆盖
put /es_db/_doc/1
{
"name":"张三123",
"sex":1
}
#post全量覆盖
POST /es_db/_doc/1
{
"name":"张三123",
"sex":1
}
#post更新
POST /es_db/_update/1
{
"doc": {
"name": "张三1",
"sex": 0
}
}
get /es_db/_doc/1
#简易语法
#查询所有数据,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":26,
"address":"石湖东路118号",
"addresstwo":"友翔路",
"remark":"java developer"
}
put /es_db/_doc/7
{
"name":"张三7",
"sex":1,
"age":27,
"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
#静态映射
DELETE /es_db_static
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
}
}
}
}
GET /es_db_static
#分页
#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" : "FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFmVITmJGSkdhUzRpcm1Iby03SHQybVEAAAAAApgTQBZ1bjBJUTU3cFE1U1RwWm5EckFYbnN3"
}
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
DELETE /es_db_good
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"
}
}
]
}
}
}
#higlight
GET /es_db_good/_search
{
"query": {
"multi_match": {
"query": "xiaomi",
"fields": ["name","desc"]
}
},
"highlight": {
"post_tags": ["</span>"],
"pre_tags": ["<span style='color:red'>"],
"fields": {
"*":{}
}
}
}
#聚合
DELETE /employees
PUT /employees
{
"mappings" : {
"properties" : {
"age" : {
"type" : "integer"
},
"gender" : {
"type" : "keyword"
},
"job" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 50
}
}
},
"name" : {
"type" : "keyword"
},
"salary" : {
"type" : "integer"
}
}
}
}
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 }
#指标
#查询员工的最高和平均工资
POST /employees/_search
{
"size": 0,
"aggs": {
"max_salary": {
"max": { "field": "salary" }
},
"min_salary":{
"min":{
"field": "salary"
}
},
"avg_salary": {
"avg": { "field": "salary" }
}
}
}
#对salary 进行统计 一个聚合,输出多值
POST /employees/_search
{
"size": 0,
"aggs": {
"stats_salary": {
"stats": {
"field": "salary"
}
}
}
}
#cardinate对搜索结果去重,4种职位
POST /employees/_search
{
"size": 0,
"aggs": {
"cardinate": {
"cardinality": {
"field": "job.keyword"
}
}
}
}
#桶聚合
#获取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"
}
}
}
}
范围分组


直方图

