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
        }
      }
    }
相关推荐
Elasticsearch1 天前
3个信号、2个环境变量、0个采集器:使用 Python 和 Elastic 的托管 OTLP 端点实现 OpenTelemetry
elasticsearch
Elasticsearch4 天前
如何通过 Claude Code 来写入 CSV 数据到 Elasticsearch
elasticsearch
大志哥1235 天前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch
TableRow5 天前
参数化搜索的实现原理:从多维索引到查询优化
elasticsearch·全文检索
醉颜凉6 天前
Elasticsearch高性能优化:Bulk API大规模数据导入性能调优全攻略
elasticsearch·性能优化·jenkins
Ysouy6 天前
Spring Data Elasticsearch 全流程学习教程
java·spring·elasticsearch
沪飘大军6 天前
goldRush-专门分析黄金的投资理财agent
java·开发语言·elasticsearch
让学习成为一种生活方式6 天前
samblaster v.0.1.26安装与使用--生信工具096
大数据·elasticsearch·搜索引擎
小马爱打代码6 天前
Elasticsearch 容器化部署(单机版):从零搭建你的搜索和分析引擎
elasticsearch