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
        }
      }
    }
相关推荐
Mephisto.java1 小时前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache
mqiqe1 小时前
Elasticsearch 分词器
python·elasticsearch
小马爱打代码1 小时前
Elasticsearch简介与实操
大数据·elasticsearch·搜索引擎
java1234_小锋10 小时前
Elasticsearch是如何实现Master选举的?
大数据·elasticsearch·搜索引擎
梦幻通灵16 小时前
ES分词环境实战
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客16 小时前
Elasticsearch 中的热点以及如何使用 AutoOps 解决它们
大数据·运维·elasticsearch·搜索引擎·全文检索
小黑屋说YYDS1 天前
ElasticSearch7.x入门教程之索引概念和基础操作(三)
elasticsearch
Java 第一深情1 天前
Linux上安装单机版ElasticSearch6.8.1
linux·elasticsearch·全文检索
KevinAha2 天前
Elasticsearch 6.8 分析器
elasticsearch
wuxingge2 天前
elasticsearch7.10.2集群部署带认证
运维·elasticsearch