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 中国社区官方博客3 小时前
Elasticsearch percolator 用于电商搜索治理:将模糊查询转换为可控的检索策略
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
逸Y 仙X4 小时前
文章二十二:ElasticSearch EQL事件查询语言
java·大数据·elasticsearch·搜索引擎·全文检索
摇滚侠5 小时前
ElasticSearch 在电商项目的作用 全文检索 自动补全 聚合查询 按距离排序
大数据·elasticsearch·全文检索
Cx330❀5 小时前
深度解析:从原理到实战,一文吃透 Linux 信号机制(上)
大数据·linux·运维·服务器·人工智能·elasticsearch
xiangzhihong85 小时前
Claude Code系列教程之Claude Code并行任务
大数据·elasticsearch·搜索引擎
Elasticsearch7 小时前
Elasticsearch ES|QL 视图:一个查询统领十二个仪表板
elasticsearch
AC赳赳老秦18 小时前
知识产权辅助:用 OpenClaw 批量生成专利交底书 / 软著申请材料,自动校验格式与内容合规性
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
历程里程碑19 小时前
4 Git远程协作:从零开始,玩转仓库关联与代码同步(带实操代码讲解)
大数据·c++·git·elasticsearch·搜索引擎·gitee·github
苍煜19 小时前
MySQL分库分表和ES到底怎么选?
数据库·mysql·elasticsearch
摇滚侠1 天前
DSL 学习 ElasticSearch 主要就是学习 DSL 查询语言
学习·elasticsearch·jenkins