Elasticsearch RESTful API入门:基础搜索与查询DSL

Elasticsearch RESTful API入门:基础搜索与查询DSL

本文为Elasticsearch初学者详细解析RESTful API的核心操作与查询DSL语法,包含大量实战示例及最佳实践。

一、Elasticsearch与RESTful API简介

Elasticsearch(ES)作为分布式搜索分析引擎,其RESTful API是与集群交互的核心方式。通过HTTP协议实现:

  • ✅ 索引文档的CRUD操作
  • ✅ 执行复杂的搜索查询
  • ✅ 获取集群健康状况
  • ✅ 管理索引生命周期

核心概念速览

概念 说明 类比关系型数据库
索引(Index) 文档的集合 数据库的表
文档(Document) JSON格式的基本数据单元 表中的一行记录
分片(Shard) 索引的水平分割单元 表分区
映射(Mapping) 定义文档字段及类型 表结构定义

二、基础API操作实战

1. 索引管理

bash 复制代码
# 创建索引
PUT /products
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "name": {"type": "text"},
      "price": {"type": "float"},
      "category": {"type": "keyword"},
      "created_at": {"type": "date"}
    }
  }
}

# 删除索引 (谨慎操作!)
DELETE /products

### 2. 文档操作

```bash
# 添加文档
POST /products/_doc/1001
{
  "name": "无线蓝牙耳机",
  "price": 299.0,
  "category": "电子产品",
  "created_at": "2023-05-10"
}

# 获取文档
GET /products/_doc/1001

# 更新文档
POST /products/_update/1001
{
  "doc": {
    "price": 259.0
  }
}

# 删除文档
DELETE /products/_doc/1001

三、搜索API核心机制

1. 搜索端点

所有搜索请求发送到_search端点:

bash 复制代码
GET /products/_search

2. 两种查询方式对比

方式 语法示例 适用场景
URL参数查询 ?q=category:电子产品 快速简单查询
DSL请求体查询 JSON结构描述复杂查询逻辑 生产环境推荐使用

四、查询DSL深度解析

1. 全文搜索 - match查询

bash 复制代码
GET /products/_search
{
  "query": {
    "match": {
      "name": {
        "query": "降噪耳机",
        "operator": "and"
      }
    }
  }
}
  • 对文本 分词处理 ( "降噪耳机" → "降噪","耳机"

  • operator参数:and(必须全部包含) 或 or(包含任意词)

2. 精确匹配 - term查询

bash 复制代码
GET /products/_search
{
  "query": {
    "term": {
      "category.keyword": {
        "value": "电子产品"
      }
    }
  }
}
  • 注意使用.keyword子字段进行未分词的精确匹配

  • 适用于状态、标签等离散值字段

3. 范围查询 - range

bash 复制代码
GET /products/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 200,
        "lte": 500
      }
    }
  }
}
  • 支持操作符:gt(>), gte(>=), lt(<), lte(<=)

  • 适用于数值、日期范围过滤

4. 布尔组合 - bool查询

bash 复制代码
GET /products/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {"name": "耳机"}}
      ],
      "should": [
        {"term": {"category.keyword": "促销品"}},
        {"range": {"price": {"lte": 199}}}
      ],
      "must_not": [
        {"term": {"brand.keyword": "A品牌"}}
      ],
      "filter": [
        {"term": {"in_stock": true}}
      ],
      "minimum_should_match": 1
    }
  }
}
子句 作用 是否影响相关性评分
must 必须满足,相当于AND
should 应该满足,相当于OR
must_not 必须不满足,相当于NOT
filter 必须满足,但不参与评分

5. 短语搜索 - match_phrase

bash 复制代码
GET /products/_search
{
  "query": {
    "match_phrase": {
      "description": {
        "query": "高清防水",
        "slop": 3
      }
    }
  }
}

-要求词语 按顺序完整出现

-slop参数允许中间间隔的词数

五、搜索结果处理技巧

1. 分页与排序

bash 复制代码
GET /products/_search
{
  "from": 10,
  "size": 5,
  "sort": [
    {"price": {"order": "asc"}},
    {"_score": {"order": "desc"}}
  ],
  "query": {...}
}

2. 字段过滤

bash 复制代码
GET /products/_search
{
  "_source": ["name", "price"],
  "query": {...}
}

3. 结果分析

典型搜索结果结构:

bash 复制代码
{
  "took": 15,                 // 查询耗时(ms)
  "timed_out": false,
  "hits": {
    "total": {
      "value": 42,            // 匹配总数
      "relation": "eq"
    },
    "max_score": 1.234,       // 最高得分
    "hits": [                 // 结果数组
      {
        "_index": "products",
        "_id": "1001",
        "_score": 1.234,
        "_source": {          // 原始文档
          "name": "无线蓝牙耳机",
          "price": 299.0
        }
      }
    ]
  }
}

六、最佳实践与避坑指南

  1. 精确匹配陷阱

     字符串字段默认同时创建textkeyword类型,精确匹配需用字段名.keyword

  2. 性能优化

bash 复制代码
"bool": {
  "filter": [   // 不参与评分的条件放filter
    {"range": {"created_at": {"gte": "now-30d/d"}}}
  ]
}
  1. 深度分页问题
     避免使用from+size处理超过10,000条的结果集,改用search_afterscrollAPI
  2. 安全防护
     生产环境必须启用:

   - X-Pack安全模块

   - API密钥认证

   - 网络访问控制

七、学习资源推荐

  1. 官方文档Elasticsearch Reference
  2. 实战工具:
    • Kibana Dev Tools
    • Postman
    • curl命令
      附录:常用查询速查表
查询类型 用途 示例
match 全文搜索 {"match": {"title": "ES"}}
term 精确值匹配 {"term": {"status": 1}}
range 范围查询 {"range": {"age": {"gte": 18}}}
bool 组合多个查询条件 见第四节示例
match_phrase 短语搜索 {"match_phrase": {"quote": "to be or"}}

下集预告《Elasticsearch RESTful API入门:全文搜索实战》

相关推荐
A hao9 分钟前
高对比度在XR虚拟背景中的作用
大数据·图像处理·人工智能·xr·广告
Haoxuekeji1 小时前
山东 AI 智能批改校园电子阅卷企业
大数据·人工智能·深度学习·安全·ai
大阳光男孩1 小时前
Spring Boot 整合 Debezium 实现 MySQL 增量数据监听(嵌入式版)
spring boot·后端·mysql
酉鬼女又兒2 小时前
零基础入门 DeepSeek V4 Pro API 开发:从环境搭建、消息格式规范到翻译函数实战、少样本提示、多轮对话聊天机器人与常见报错全流程详解指南
大数据·网络·数据库·人工智能·macos·机器人·github
X-⃢_⃢-X2 小时前
一、第一阶段:认识 Spring Boot
java·spring boot·后端
ddshub_cc3 小时前
理解 Loop Engineering 与 AI 编程成本优化
大数据·人工智能·gpt·prompt·ai编程
喵喵喵~~~~3 小时前
2026 指挥控制台源头工厂深度测评:按行业项目落地能力择优采购指南
大数据·运维·人工智能·智能家居
喵喵喵~~~~3 小时前
2026 调度操作台厂商横向实测:多行业落地案例拆解,指挥中心控制台怎么选
大数据·人工智能
hkNaruto4 小时前
【大数据】Demo 城市供水管网智能监控系统——项目开发实施计划
大数据·人工智能
小顿的企业观察4 小时前
从人形机器人到AI销售智能体,AI正在重塑中企出海的底层逻辑
大数据·运维·人工智能·机器人·产品运营·制造