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
        }
      }
    }
相关推荐
萌吖LOVETurtle~4 小时前
阿里云部署微调chatglm3
elasticsearch·阿里云·云计算
Elastic 中国社区官方博客4 小时前
Elastic 9.1/8.19:默认启用 BBQ,ES|QL 支持跨集群搜索(CCS)正式版,JOINS 正式版,集成 Azure AI Foundry
大数据·elasticsearch·搜索引擎·全文检索·azure·elastic
找不到、了7 小时前
Mysql使用Canal服务同步数据->ElasticSearch
数据库·mysql·elasticsearch
Adorable老犀牛8 小时前
Exporters | 安装elasticsearch_exporter
elasticsearch·prometheus·exporter
干了这杯柠檬多10 小时前
使用maven-shade-plugin解决es跨版本冲突
java·elasticsearch·maven
尚学教辅学习资料1 天前
SpringBoot3.x入门到精通系列:3.3 整合 Elasticsearch 详解
大数据·elasticsearch·jenkins
Hello.Reader1 天前
Elasticsearch 混合检索一句 `retriever.rrf`,把语义召回与关键词召回融合到极致
大数据·elasticsearch·搜索引擎
Freed&1 天前
倒排索引:Elasticsearch 搜索背后的底层原理
大数据·elasticsearch·搜索引擎·lucene
bemyrunningdog1 天前
IntelliJIDEA上传GitHub全攻略
大数据·elasticsearch·搜索引擎
33255_40857_280591 天前
ElasticSearch实战指南:从零部署到Java高效集成
java·elasticsearch