Elasticsearch-数据索引与查询

目录

创建索引

文档的CRUD操作

执行基本查询

使用过滤器

结果排序与分页

多条件组合查询


创建索引

在Elasticsearch中,索引是存储相关数据的地方。它类似于关系型数据库中的表,但具有更强的灵活性和可扩展性。创建一个索引时,可以定义索引的设置(settings)和映射(mapping)。设置包括分片数、副本数等;而映射则定义了字段的数据类型及属性。

示例 : 创建一个名为library的新索引,并为书籍信息配置映射。

javascript 复制代码
PUT /library
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "author": { "type": "keyword" },
      "publish_date": { "type": "date" },
      "genre": { "type": "keyword" }
    }
  }
}
文档的CRUD操作

一旦索引被创建好,接下来就可以开始对其中的文档进行增删改查操作了。

  • 创建文档 (Create)

    javascript 复制代码
    POST /library/_doc/1
    {
      "title": "Pride and Prejudice",
      "author": "Jane Austen",
      "publish_date": "1813-01-28",
      "genre": "Romance"
    }
  • 读取文档 (Read) 可以根据ID获取特定文档。

    javascript 复制代码
    GET /library/_doc/1
  • 更新文档 (Update) 更新文档内容。

    javascript 复制代码
    POST /library/_update/1
    {
      "doc": {
        "title": "Pride and Prejudice: Annotated Edition"
      }
    }
  • 删除文档 (Delete) 删除指定ID的文档。

    javascript 复制代码
    DELETE /library/_doc/1
执行基本查询

Elasticsearch支持多种类型的查询方式,从简单的全文搜索到复杂的布尔组合都有涵盖。这里我们先看一些基础的查询示例。

  • 匹配查询 (Match Query) 搜索所有标题中包含"Prejudice"的书籍。

    复制代码
    GET /library/_search
    {
      "query": {
        "match": {
          "title": "Prejudice"
        }
      }
    }
  • 术语查询 (Term Query) 查找作者为"Jane Austen"的所有书籍。

    javascript 复制代码
    GET /library/_search
    {
      "query": {
        "term": {
          "author": "Jane Austen"
        }
      }
    }
使用过滤器

过滤器允许你基于某些条件筛选结果集,且不影响评分。这对于优化性能非常有用,特别是在处理大量数据时。

  • 范围过滤 (Range Filter) 找出出版日期在19世纪的所有书籍。

    javascript 复制代码
    GET /library/_search
    {
      "query": {
        "bool": {
          "filter": [
            {
              "range": {
                "publish_date": {
                  "gte": "1800-01-01",
                  "lte": "1899-12-31"
                }
              }
            }
          ]
        }
      }
    }
结果排序与分页

当返回大量结果时,对它们进行排序和分页是非常有用的。

  • 按字段排序 根据出版日期降序排列搜索结果。

    javascript 复制代码
    GET /library/_search
    {
      "query": {
        "match_all": {}
      },
      "sort": [
        {"publish_date": {"order": "desc"}}
      ]
    }
  • 分页显示 获取第2页的结果,每页显示10条记录。

    javascript 复制代码
    GET /library/_search
    {
      "size": 10,
      "from": 10,
      "query": {
        "match_all": {}
      }
    }
多条件组合查询

利用布尔查询,我们可以灵活地结合多个查询条件来实现复杂逻辑。

  • 布尔组合查询 (Bool Query) 查找标题含有"love"并且属于"Romance"类别的书籍。

    javascript 复制代码
    GET /library/_search
    {
      "query": {
        "bool": {
          "must": [
            { "match": { "title": "love" }},
            { "term": { "genre": "Romance" }}
          ]
        }
      }
    }
  • 或条件查询 (Should Clause) 返回标题含有"war"或者"peace"的书籍。

    javascript 复制代码
    GET /library/_search
    {
      "query": {
        "bool": {
          "should": [
            { "match": { "title": "war" }},
            { "match": { "title": "peace" }}
          ],
          "minimum_should_match": 1
        }
      }
    }
相关推荐
Elastic 中国社区官方博客7 小时前
让大模型思考,让小模型执行:在 Elastic Workflows 中拆分 LLM 成本
大数据·运维·数据库·人工智能·elasticsearch·ai
IZero078 小时前
Elasticsearch 学习笔记筑基-文档操作篇
笔记·学习·elasticsearch
醉颜凉8 小时前
Elasticsearch 核心基石:倒排索引全解析(原理+结构+流程图+实战)
elasticsearch·jenkins·流程图
醉颜凉8 小时前
Elasticsearch底层原理:文档更新与删除完整执行流程深度剖析
大数据·elasticsearch·jenkins
2601_9609067215 小时前
全球AI产业正加速迈入全域渗透
elasticsearch·百度·database·时序数据库·memcache
Elasticsearch17 小时前
打通 AI Agent 落地生产的“最后一步”:Elastic Stack 中的 Human-in-the-Loop (HITL) 审批工作流实战
elasticsearch
Elasticsearch18 小时前
构建值得信赖的金融服务领域 agentic AI:从数据到自主行动
elasticsearch
普通网友1 天前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins
虫小宝1 天前
优惠券省钱APP查询性能优化:Elasticsearch与Canal实现的多维度商品搜索毫秒级响应方案
elasticsearch·性能优化·jenkins
leoZ2312 天前
10-Git 仓库蒸馏术:从代码仓库到 OpenClaw 虚拟人-蒸馏工具链
大数据·git·深度学习·神经网络·目标检测·elasticsearch·lstm