Elasticsearch

一段话总结

Elasticsearch 是一款高性能分布式搜索引擎,在搜索引擎技术排名中位居前列。它基于 Lucene 开发,具备分布式、水平扩展、提供 Restful 接口等优势,常与 kibana、Logstash、Beats 组成 ELK 技术栈,应用于日志数据分析、实时监控等领域。其核心概念包括倒排索引、IK 分词器,涉及索引库、文档的多种操作,并且提供 JavaRestClient 客户端进行开发,方便与应用程序集成。


思维导图


详细总结

  1. Elasticsearch 简介

    • 起源与发展 :基于 Lucene 开发,2004 年 Shay Banon 开发 Compass,2010 年重写后命名为 Elasticsearch,官网为Elastic --- 搜索 AI 公司 | Elastic ,当前最新版本 8.x.x。
    • 优势:支持分布式且可水平扩展,提供 Restful 接口,方便与各种语言的应用程序交互。
    • 应用场景:与 kibana、Logstash、Beats 组成 ELK 技术栈,广泛应用于日志数据分析、实时监控等领域。
  2. 核心概念

    • 倒排索引:与传统数据库正向索引不同,对文档内容分词,为词条创建索引并记录文档 id,查询时先查词条得文档 id 再查文档,提升查询效率。
    • IK 分词器:用于中文分词,采用正向迭代最细粒度切分算法。可在 Kibana 的 DevTools 中测试,还能通过配置拓展词典增加自定义词库。
    • 基础概念 :文档以 JSON 格式存储,索引是相同类型文档的集合,映射是对索引中文档的字段约束信息。与 MySQL 对比见下表:
      |MySQL|Elasticsearch | 说明 |
      |---|---|---|
      |Table|Index | 索引类似数据库的表 |
      |Row|Document | 文档类似数据库中的行,为 JSON 格式 |
      |Column|Field | 字段类似数据库中的列 |
      |Schema|Mapping|Mapping 类似数据库的表结构,用于约束文档字段 |
      |SQL|DSL|DSL 是 JSON 风格请求语句,用于操作 Elasticsearch|
  3. 操作与语法

    • 索引库操作:通过 Restful 接口实现创建(PUT / 索引库名)、查询(GET / 索引库名 )、删除(DELETE / 索引库名 )、添加字段(PUT / 索引库名 /_mapping)操作。例如创建索引库 heima 并设置 mapping:

    PUT /heima
    {
    "mappings": {
    "properties": {
    "info":{
    "type": "text",
    "analyzer": "ik_smart"
    },
    "email":{
    "type": "keyword",
    "index": "false"
    },
    "name":{
    "properties": {
    "firstName": {
    "type": "keyword"
    }
    }
    }
    }
    }
    }

  • 文档操作:支持文档的创建(POST / 索引库名 /_doc/ 文档 id )、查询(GET / 索引库名 /_doc/ 文档 id )、删除(DELETE / 索引库名 /_doc/ 文档 id )、修改(全量修改 PUT / 索引库名 /_doc/ 文档 id ;增量修改 POST / 索引库名 /_update/ 文档 id )操作,也允许批量处理(POST /_bulk)。

  • JavaRestClient:多数企业使用 8 以下版本,选择早期 JavaRestClient 客户端。初始化需引入依赖、覆盖默认 ES 版本并创建 RestHighLevelClient 对象。通过该客户端可进行索引库和文档的各种操作,如创建索引库:

    @Test
    void testCreateIndex() throws IOException {
    CreateIndexRequest request = new CreateIndexRequest("items");
    request.source(MAPPING_TEMPLATE, XContentType.JSON);
    client.indices().create(request, RequestOptions.DEFAULT);
    }

关键问题

  1. Elasticsearch 相比其他搜索引擎的优势体现在哪些方面?
    • 答案:Elasticsearch 支持分布式且可水平扩展,能应对大规模数据存储和高并发查询需求;提供 Restful 接口,方便各种语言的应用程序调用,兼容性强;结合 ELK 技术栈,在日志数据分析、实时监控等领域有强大的功能,而其他搜索引擎可能不具备这些综合优势。
  2. IK 分词器如何进行自定义词库拓展?
    • 答案:通过修改 IK 分词器 config 目录下的 IkAnalyzer.cfg.xml 文件来添加拓展词典。在文件中添加<entry key="ext_dict">ext.dic</entry>这样的配置,然后在 ext.dic 词典文件中添加拓展词条即可。
  3. 使用 JavaRestClient 进行文档操作时,全量更新和局部更新有何区别?
    • 答案:全量更新是再次写入 id 一样的文档,会删除旧文档并添加新文档,其 JavaAPI 与新增文档一致;局部更新则是只更新指定部分字段,使用 UpdateRequest 对象并通过request.doc("字段名", "新值")的方式设置要更新的字段,不会删除旧文档的其他字段内容。
相关推荐
livemetee7 小时前
Flink2.0学习笔记:使用HikariCP 自定义sink实现数据库连接池化
大数据·数据库·笔记·学习·flink
人大博士的交易之路7 小时前
龙虎榜——20250822
大数据·数据挖掘·数据分析·缠中说禅·龙虎榜·道琼斯结构
青云交16 小时前
Java 大视界 -- Java 大数据在智能安防人脸识别系统中的活体检测与防伪技术应用
java·大数据·生成对抗网络·人脸识别·智能安防·防伪技术·活体测试
chenglin01617 小时前
ES_索引模板
大数据·elasticsearch·jenkins
byte轻骑兵19 小时前
大数据时代时序数据库选型指南:深度解析与 Apache IoTDB 实践
大数据·apache·时序数据库
NPE~20 小时前
[docker/大数据]Spark快速入门
大数据·分布式·docker·spark·教程
的小姐姐20 小时前
AI与IIOT如何重新定义设备维护系统?_璞华大数据Hawkeye平台
大数据·人工智能
TDengine (老段)21 小时前
TDengine IDMP 最佳实践
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据
彬彬醤1 天前
Mac怎么连接VPS?可以参考这几种方法
大数据·运维·服务器·数据库·线性代数·macos·矩阵
星域智链1 天前
车载 GPS 与手机导航的终极对决:谁在复杂路况下更胜一筹?
大数据·科技·ai