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("字段名", "新值")的方式设置要更新的字段,不会删除旧文档的其他字段内容。
相关推荐
十六ᵛᵃᵉ19 分钟前
day2_Flink基础
大数据·flink
JoLonn1 小时前
PHP中yield关键字的使用
大数据·开发语言·php
闯闯桑1 小时前
Spark 从HDFS读取时,通常按文件块(block)数量决定初始partition数,这是怎么实现的?
大数据·hdfs·spark
ckx666666cky2 小时前
支付宝关键词排名优化策略:提升小程序曝光的关键
大数据·搜索引擎·小程序·支付宝小程序·支付宝关键词排名优化·支付宝排名优化
atwdy3 小时前
【hadoop】hadoop streaming
大数据·hadoop·mr·streaming
埃菲尔铁塔_CV算法4 小时前
WPF 与 C# 融合开发:从基础到高级应用(二)
大数据·hadoop·分布式
Dotrust东信创智4 小时前
革新测试管理 2.0丨Storm UTP统一测试管理平台智能化升级与全流程优化
大数据·storm
十六ᵛᵃᵉ4 小时前
day5_Flink基础
大数据·flink·linq
反方向的钟儿6 小时前
人工智能入门(2)
大数据·人工智能·学习·自然语言处理·nlp·vr
java技术小馆6 小时前
ES的文档更新机制
大数据·elasticsearch·搜索引擎