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("字段名", "新值")的方式设置要更新的字段,不会删除旧文档的其他字段内容。
相关推荐
WLJT1231231233 小时前
生活电器:重构家居体验的产业变革与发展探索
大数据·人工智能·科技·生活
GIS数据转换器4 小时前
城市基础设施安全运行监管平台
大数据·运维·人工智能·物联网·安全·无人机·1024程序员节
搞科研的小刘选手5 小时前
【云计算专题会议】第二届云计算与大数据国际学术会议(ICCBD 2025)
大数据·人工智能·物联网·5g·云计算·6g·智能通信
电商软件开发 小银5 小时前
微信生态新机遇:视频号推客模式助力商家突围
大数据·人工智能·twitter·系统开发·实体店转型·数字化经济·视频号推客模式
毕设源码-赖学姐6 小时前
【开题答辩全过程】以基于Hadoop的电商数据分析系统为例,包含答辩的问题和答案
大数据·hadoop·分布式·1024程序员节
汤姆yu6 小时前
基于python大数据技术的医疗数据分析与研究
大数据·1024程序员节·医疗数据分析·医疗预测
小马哥编程6 小时前
【软考架构】架构风格:RAG知识库是属于软件八大架构风格中的哪一个,黑板架构风格 ?规则系统体系风格?
大数据·计算机网络·架构·1024程序员节
萤丰信息6 小时前
慧园区:科技赋能下的城市空间新范式
大数据·科技·安全·重构·智慧城市·智慧园区
会飞的小蛮猪7 小时前
ELK运维之路(异常日志告警)
elasticsearch·自动化运维·logstash
数据科学作家7 小时前
如何入门python机器学习?金融从业人员如何快速学习Python、机器学习?机器学习、数据科学如何进阶成为大神?
大数据·开发语言·人工智能·python·机器学习·数据分析·统计分析