ElasticSearch常用语句

一、数据操作语句
1. 文档增删改查(CRUD)
  • 创建文档(PUT)

    PUT /索引名/类型/文档ID
    {
      "字段1": "值1",
      "字段2": "值2",
      ...
    }
    

     

    示例:创建一个用户文档

    PUT /users/_doc/1
    {
      "name": "张三",
      "age": 30,
      "email": "zhangsan@example.com"
    }
    
  • 获取文档(GET)

    GET /索引名/类型/文档ID
    
     

    示例:获取 ID 为 1 的用户文档

    GET /users/_doc/1
    
  • 更新文档(POST/PUT)

    • 全量更新(PUT):覆盖整个文档
      PUT /users/_doc/1
      {
        "name": "张三",
        "age": 31,  // 年龄更新为31
        "email": "zhangsan@example.com"
      }
      
    • 部分更新(POST):仅修改指定字段
      POST /users/_doc/1/_update
      {
        "doc": {
          "age": 31
        }
      }
      
  • 删除文档(DELETE)

    DELETE /索引名/类型/文档ID
    
     

    示例:删除 ID 为 1 的文档

    DELETE /users/_doc/1
    
2. 批量操作(Bulk API)

用于高效批量处理文档(增删改查),减少网络开销:

POST /_bulk
{ "index": { "_index": "users", "_id": "2" } }
{ "name": "李四", "age": 25 }
{ "delete": { "_index": "users", "_id": "1" } }
{ "update": { "_index": "users", "_id": "3" } }
{ "doc": { "age": 40 } }
二、索引管理语句
1. 创建索引(PUT)
PUT /索引名
{
  "settings": {
    "number_of_shards": 3,       // 主分片数
    "number_of_replicas": 1      // 副本数
  },
  "mappings": {
    "properties": {
      "字段1": { "type": "text" },  // 文本类型(可分词)
      "字段2": { "type": "keyword" }, // 关键词类型(精确匹配)
      "字段3": { "type": "date" }    // 日期类型
    }
  }
}
2. 查看索引(GET)
GET /索引名               // 查看单个索引
GET /索引名1,索引名2       // 查看多个索引
GET /_all                 // 查看所有索引
3. 删除索引(DELETE)
DELETE /索引名
4. 更新索引设置(PUT)
PUT /索引名/_settings
{
  "number_of_replicas": 2  // 修改副本数
}
三、查询检索语句
1. 简单查询(Query DSL)
  • 匹配查询(match):对文本字段进行分词匹配

    GET /索引名/_search
    {
      "query": {
        "match": {
          "字段名": "查询关键词"
        }
      }
    }
    
     

    示例:查询用户名为 “张三” 的文档

    GET /users/_search
    {
      "query": {
        "match": {
          "name": "张三"
        }
      }
    }
    
  • 精确匹配(term):对关键词字段进行精确匹配

    GET /索引名/_search
    {
      "query": {
        "term": {
          "字段名.keyword": "精确值"
        }
      }
    }
    
  • 短语匹配(match_phrase):要求关键词按顺序出现

    GET /索引名/_search
    {
      "query": {
        "match_phrase": {
          "字段名": "短语查询"
        }
      }
    }
    
2. 复合查询
  • 布尔查询(bool):组合多个查询条件

    GET /索引名/_search
    {
      "query": {
        "bool": {
          "must": [          // 必须满足
            { "match": { "字段1": "条件1" } }
          ],
          "should": [        // 至少满足一个
            { "match": { "字段2": "条件2" } }
          ],
          "must_not": [      // 必须不满足
            { "match": { "字段3": "条件3" } }
          ]
        }
      }
    }
    
  • 范围查询(range):筛选指定范围的值

    GET /索引名/_search
    {
      "query": {
        "range": {
          "字段名": {
            "gte": 10,       // 大于等于
            "lte": 100       // 小于等于
          }
        }
      }
    }
    
3. 聚合查询(Aggregations)

用于统计分析数据,例如分组、排序、计算平均值等:

GET /索引名/_search
{
  "size": 0,  // 不返回文档,只返回聚合结果
  "aggs": {
    "分组名称": {
      "terms": {
        "field": "分组字段",
        "size": 10
      },
      "aggs": {
        "统计名称": {
          "avg": { "field": "统计字段" }  // 示例:计算平均值
        }
      }
    }
  }
}
四、其他常用语句
1. 查看集群健康状态
GET /_cluster/health
2. 查看集群节点信息
GET /_cat/nodes?v
3. 查看索引分片状态
GET /_cat/shards

Elasticsearch 使用场景

1. 全文搜索场景
  • 典型场景:电商平台商品搜索、文档检索系统、论坛 / 博客搜索
  • 优势
    • 支持分词、模糊匹配、短语查询等复杂搜索逻辑;
    • 可对搜索结果进行相关性排序,提升用户体验;
    • 相比数据库 like 查询,性能更高(倒排索引结构)。
2. 日志分析与监控
  • 典型场景:ELK Stack(Elasticsearch+Logstash+Kibana)日志分析系统
  • 优势
    • 实时收集、存储和分析海量日志数据;
    • 通过 Kibana 可视化图表展示系统状态、错误趋势等;
    • 支持日志聚合统计(如按时间、模块分组)。
3. 实时数据分析
  • 典型场景:用户行为分析、业务指标监控、A/B 测试数据统计
  • 优势
    • 支持实时数据摄入和近实时查询;
    • 聚合查询(如分组、排序、统计)性能优异;
    • 可与 BI 工具集成,生成动态报表。
4. 地理位置搜索
  • 典型场景:地图应用附近地点搜索、物流轨迹查询
  • 优势
    • 内置地理空间数据类型(geo_point),支持距离查询、区域筛选;
    • 可按距离排序(如 “离我最近的餐厅”)。
5. 分布式数据存储与检索
  • 典型场景:海量数据存储(如电商商品库、新闻文章库)
  • 优势
    • 分布式架构支持 PB 级数据存储和水平扩展;
    • 自动分片和副本机制保障高可用性和容错性;
    • 支持多数据中心部署,满足异地容灾需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值