[ELK实战] Elasticsearch 常用操作 (基于DSL)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: [ELK实战] Elasticsearch 常用操作 (基于DSL)

方法 / 步骤

一: 前置工作

1.1 导入数据

POST /staff/_bulk
{"index":{"_id":1}}
{"name":"zs","realname":"张三","age":10,"birthday":"2018-12-27","salary":1000.0,"address":"北京市北海公园"}
{"index":{"_id":2}}
{"name":"ls","realname":"李四","age":20,"birthday":"2017-10-20","salary":2000.0,"address":"北京市京东大峡谷"}
{"index":{"_id":3}}
{"name":"ww","realname":"王五","age":30,"birthday":"2016-03-15","salary":3000.0,"address":"北京市陶然亭"}
{"index":{"_id":4}}
{"name":"zl","realname":"赵六","age":40,"birthday":"2003-04-19","salary":4000.0,"address":"北京市玉渊潭"}
{"index":{"_id":5}}
{"name":"tq","realname":"田七","age":50,"birthday":"2001-08-11","salary":5000.0,"address":"北京市圆明园"}

1.2 常用DSL

# 查看集群的健康值:
GET _cat/health

# 测试分词器
POST /_analyze
{
  "text":"工程师",
  "analyzer":"ik_max_word"
}

# 查看某个索引属性
GET {index_name}
#查看指定索引文档总数
GET {index_name}/_count
#按照文档数量排序索引
GET _cat/indices?v&s=docs.count:desc
# 根据ID便捷查询索引文件
GET {index_name}/_doc/{index_id}


#创建索引库
PUT page

#删除索引
DELETE /page


二: 创建相关

2.1 创建索引,指定mapping(映射关系)

索引库一旦mapping创建后无法修改和删除,但是可以添加新的字段
为什么不能修改一个字段的type?原因是一个字段的类型修改以后,那么该字段的所有数据都需要重新索引。Elasticsearch底层使用的是lucene库,字段类型修改以后索引和搜索要涉及分词方式等操作。
PUT /store
{
  "mappings": {
    "properties": {
      "id":{"type": "integer"},
      "en_name":{"type": "keyword"},
      "zn_name":{"type": "text"},
      "creat_time":{"type": "date"},
      "state_owned":{"type": "boolean"},
      "address":{"type": "text","analyzer": "ik_max_word","search_analyzer": "ik_smart"},
      "employees":{"type": "integer_range"}
    }
  }
}

2.2 新增Mapping映射

POST /{index_name}/_mapping
{
  "properties": {
      "phone":{
        "type": "keyword"
      }
    }
}

三: 查询操作

3.1 query 查询

query 下面的参数有 match /
// match分词匹配,必须使用分词 text字段
GET {index_name}/_search
{
  "query": {
    "match": {
      "name": "operator red sea"
    }
  }
}

// 查询某个具体值
GET {index_name}/_search
{
  "query": {
    "match": {
      "actorList.name": "zhang han yu"
    }
  }
}

// 过滤查询
// term 值等匹配 必须用keyword类型字段
// term 中的词是不会被分词的,但es默认会将数据中的词进行分词所以除非是分词内的,否则term中查不到该分词
GET {index_name}/_search
{
  "query": {
    "term": {
      "user.id": {
        "value": "kimchy",
        "boost": 1.0
      }
    }
  }
}

// 短语匹配 类似于 like '%xxxx%'
GET {index_name}/_search
{
  "query": {
    "match_phrase": {
      "actorList.name": "zhang han yu"
    }
  }
}


// fuzzy查询,模糊匹配(容错匹配)
GET {index_name}/_search
{
  "query": {
    "fuzzy": {
      "name": "rad"
    }
  }
}

3.2 范围查询

// 范围过滤
GET  {index_name}/_search
{
  "query": {
    "range": {
      "doubanScore": {
        "gte": 6,
        "lte": 9
      }
    }
  }
}

3.3 混合查询

// 混合查询方式 1、先匹配,再过滤 2、同时匹配加过滤

//1.先匹配,再过滤
GET {index_name}/_search
{
  "query": {
    "bool": {
      "filter": [
        { "term": { "color": "red"   }},
        { "term": { "brand": "gucci" }}
      ]
    }
  }
}
//或者

//1.先匹配,再过滤
GET {index_name}/_search
{
  "query": {
    "match": {
      "name": "red"
    }
  },
  "post_filter": {
    "term": {
      "actorList.id.keyword": "ygc"
    }
  }
}
//2.同时匹配加过滤
GET {index_name}/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "red"
          }
        }
      ],
      "filter": {
          "term": {
            "actorList.id.keyword": "ygc"
          }
         }
      }
    }
}

3.4 分页查询

// 分页查询,类似于limit
// from = (pageNo-1)*size
// 指定的查询字段"_source":
// 高亮highlight
GET {index_name}/_search
{
  "query": {
    "match": {
      "name": "red"
    }
  },
  "highlight": {
    "fields": {
      "name": "name": {"pre_tags": "<span color='red'>","post_tags": "</span>"}
    }
  },
  "_source": ["name","doubanScore"], 
  "from": 0,
  "size": 20
}

四: 更新操作

  • 覆盖方式更新(会把旧数据替换掉)
PUT / {index_name}/{index_id}?refresh=true
{
  "properties":{
    "age":{
      "type":"integer",
      "index": false
    }
  }
}
  • 部分更新
# 如果数据不存在,会报错
POST {index_name}/_update/{index_id}?refresh=true
{
  "doc": {
    "name": "胡八一"
  }
}

# 如果我们想要这样的效果:如果数据不存在,则作为新数据添加
POST {index_name}/_update/{index_id}?refresh=true
{
  "doc": {
    "name": "胡八一"
  },
  "doc_as_upsert": true
}


五: 删除操作

  • 直接删除索引
DELETE index-name
DELETE entry_record

六: 聚合查询

  • 聚合查询可以查看下面的文章

Elasticsearch 聚合查询一: Metric/指标聚合
Elasticsearch 聚合查询二: Bucketing/桶聚合

参考资料 & 致谢

[1] 官方文档

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
目录
相关文章
|
2月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
2月前
|
JSON Java API
(ELK)ElasticSearch8.7 搭配 SpringDataElasticSearch5.1 的使用
截至2023/7/11日,全网最全最直白的SpringDataElasticSearch5.1
218 2
|
存储 运维 监控
超越传统模型:从零开始构建高效的日志分析平台——基于Elasticsearch的实战指南
【10月更文挑战第8天】随着互联网应用和微服务架构的普及,系统产生的日志数据量日益增长。有效地收集、存储、检索和分析这些日志对于监控系统健康状态、快速定位问题以及优化性能至关重要。Elasticsearch 作为一种分布式的搜索和分析引擎,以其强大的全文检索能力和实时数据分析能力成为日志处理的理想选择。
833 6
|
9月前
|
数据采集 JSON 数据挖掘
Elasticsearch 的DSL查询,聚合查询与多维度数据统计
Elasticsearch的DSL查询与聚合查询提供了强大的数据检索和统计分析能力。通过合理构建DSL查询,用户可以高效地搜索数据,并使用聚合查询对数据进行多维度统计分析。在实际应用中,灵活运用这些工具不仅能提高查询效率,还能为数据分析提供深入洞察。理解并掌握这些技术,将显著提升在大数据场景中的分析和处理能力。
434 20
|
8月前
|
人工智能 自然语言处理 运维
让搜索引擎“更懂你”:AI × Elasticsearch MCP Server 开源实战
本文介绍基于Model Context Protocol (MCP)标准的Elasticsearch MCP Server,它为AI助手(如Claude、Cursor等)提供与Elasticsearch数据源交互的能力。文章涵盖MCP概念、Elasticsearch MCP Server的功能特性及实际应用场景,例如数据探索、开发辅助。通过自然语言处理,用户无需掌握复杂查询语法即可操作Elasticsearch,显著降低使用门槛并提升效率。项目开源地址:&lt;https://github.com/awesimon/elasticsearch-mcp&gt;,欢迎体验与反馈。
2031 1
ELK 圣经:Elasticsearch、Logstash、Kibana 从入门到精通
ELK是一套强大的日志管理和分析工具,广泛应用于日志监控、故障排查、业务分析等场景。本文档将详细介绍ELK的各个组件及其配置方法,帮助读者从零开始掌握ELK的使用。
|
存储 监控 安全
|
存储 JSON 监控
大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询
大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询
785 4
|
3月前
|
消息中间件 Java Kafka
搭建ELK日志收集,保姆级教程
本文介绍了分布式日志采集的背景及ELK与Kafka的整合应用。传统多服务器环境下,日志查询效率低下,因此需要集中化日志管理。ELK(Elasticsearch、Logstash、Kibana)应运而生,但单独使用ELK在性能上存在瓶颈,故结合Kafka实现高效的日志采集与处理。文章还详细讲解了基于Docker Compose构建ELK+Kafka环境的方法、验证步骤,以及如何在Spring Boot项目中整合ELK+Kafka,并通过Logback配置实现日志的采集与展示。
785 64
搭建ELK日志收集,保姆级教程
|
9月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
674 90