当前位置: 首页 > news >正文

Elasticsearch-数据索引与查询

目录

创建索引

文档的CRUD操作

执行基本查询

使用过滤器

结果排序与分页

多条件组合查询


创建索引

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

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

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)

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

    GET /library/_doc/1
  • 更新文档 (Update) 更新文档内容。

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

    DELETE /library/_doc/1
执行基本查询

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

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

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

    GET /library/_search
    {"query": {"term": {"author": "Jane Austen"}}
    }
使用过滤器

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

  • 范围过滤 (Range Filter) 找出出版日期在19世纪的所有书籍。
    GET /library/_search
    {"query": {"bool": {"filter": [{"range": {"publish_date": {"gte": "1800-01-01","lte": "1899-12-31"}}}]}}
    }
结果排序与分页

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

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

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

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

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

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

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

    GET /library/_search
    {"query": {"bool": {"should": [{ "match": { "title": "war" }},{ "match": { "title": "peace" }}],"minimum_should_match": 1}}
    }

http://www.mrgr.cn/news/49052.html

相关文章:

  • SQL INNER JOIN:深入解析与实际应用
  • JavaScript可视化:探索顶尖的图表库
  • AI学习指南深度学习篇-变分自编码器在深度学习中的实际应用
  • Promise.resolve()
  • Rhymes AI发布首款开源多模态AI模型Aria 性能超越GPT-4o mini等多家知名AI模型
  • 使用argparse库实现命令行参数解析的实用指南
  • AI学习指南深度学习篇-变分自编码器Python实践
  • 02 线性结构——数组(特性、优缺点、基本使用、可变长的动态数组)
  • 浅析主流监控告警系统基本架构和原理
  • React面试题笔记(一)
  • ACwing题目分享 756
  • 正则表达式的常用示例
  • 泛谈阿里vs美团订单存储架构演进
  • FileZilla的简单使用
  • java 基础
  • 文本处理工具
  • 使用 turtle 库绘制花朵(包括花瓣、花茎和叶子)图形
  • 代码随想录算法训练营第41天| 300.最长递增子序列, 674. 最长连续递增序列 ,718. 最长重复子数组
  • 等保测评:企业网络安全的关键一环
  • Keyword Arguments(关键字参数)