Elasticsearch 常用语法手册

🧰 Elasticsearch 常用语法手册

📚 目录


🔹 索引操作

查询全部索引

GET _search

创建索引

PUT /es_db

创建索引并设置分片数和副本数

PUT /es_db
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

查询索引是否存在

HEAD /es_db

查询索引详情

GET /es_db

删除索引

DELETE /es_db

修改索引配置(如副本数)

PUT /es_db/_settings
{
  "index": {
    "number_of_replicas": 1
  }
}

添加 IK 分词器

PUT /es_db
{
  "settings": {
    "index.analysis.analyzer.default.type": "ik_max_word"
  }
}

🔹 文档操作

添加文档

PUT /es_db/_doc/1
{
  "name": "张三",
  "age": 10,
  "address": "深圳市宝安区海谷科技大厦"
}

查询文档

GET /es_db/_search

局部更新文档

POST /es_db/_update/5
{
  "doc": {
    "age": 22
  }
}

删除文档

DELETE /es_db/_doc/5

🔹 查询操作

条件查询(match)

GET /es_db/_search
{
  "from": 0,
  "size": 20,
  "query": {
    "match": {
      "name": "张三"
    }
  }
}

条件查询(q 参数)

GET /es_db/_search?q=name:庆

短语匹配查询(match_phrase)

POST /es_db/_search
{
  "query": {
    "match_phrase": {
      "name": "张三"
    }
  }
}

使用过滤器查询(post_filter)

GET /es_db/_search
{
  "query": {
    "match_all": {}
  },
  "post_filter": {
    "range": {
      "age": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

高亮显示

POST /es_db/_search
{
  "query": {
    "match_phrase": {
      "name": "张三"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}

🔹 聚合查询

terms 聚合(按字段统计)

GET /es_db/_search
{
  "query": { "match_all": {} },
  "aggs": {
    "name": {
      "terms": {
        "field": "address.keyword"
      }
    }
  }
}

⚠️ 注意:text 类型字段不能直接用于聚合,需使用 .keyword 子字段或开启 fielddata=true(占用较多内存)

avg 聚合(求平均值)

GET /es_db/_search
{
  "query": { "match_all": {} },
  "aggs": {
    "name": {
      "avg": {
        "field": "age"
      }
    }
  }
}

🔹 健康与状态查看

查看集群健康状态

GET _cat/health

查看索引情况

GET _cat/indices?v

❗ 常见问题与注意事项

text vs keyword

  • text 类型适合全文搜索,会进行分词。
  • keyword 类型不会分词,适合精确匹配、排序、聚合等操作。
  • 如果需要对 text 字段进行排序或聚合,可以:
    • 使用 .keyword 子字段;
    • 或在映射中设置 "fielddata": true,但注意内存消耗较大。

示例字段映射

PUT /es_db
{
  "mappings": {
    "properties": {
      "address": {
        "type": "text",
        "fields": {
          "keyword": { "type": "keyword" }
        }
      }
    }
  }
}

排序 + 分页查询示例

GET /es_db/_search
{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": [
        { "match": { "name": "张三" } }
      ],
      "filter": [
        { "range": { "age": { "gte": 18 } } }
      ]
    }
  },
  "sort": [
    { "createTime": "desc" }
  ]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值