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("字段名", "新值")的方式设置要更新的字段,不会删除旧文档的其他字段内容。
相关推荐
元拓数智7 小时前
IntaLink:破解数仓建设痛点,重塑高效建设新范式
大数据·数据仓库·人工智能·数据关系·intalink
区块链小八歌8 小时前
从电商收入到链上资产:Liquid Royalty在 Berachain 重塑 RWA 想象力
大数据·人工智能·区块链
沃达德软件8 小时前
大数据反诈平台功能解析
大数据·人工智能
音视频牛哥8 小时前
AI时代底层技术链:GPU、云原生与大模型的协同进化全解析
大数据·云原生·kubernetes·音视频·transformer·gpu算力·云原生cloud native
serendipity_hky8 小时前
互联网大厂Java面试故事:核心技术栈与场景化业务问题实战解析
java·spring boot·redis·elasticsearch·微服务·消息队列·内容社区
howard20058 小时前
实训云上搭建大数据集群
大数据·大数据集群·实训云
大模型服务器厂商9 小时前
人形机器人的技术概况与算力支撑背景
大数据·人工智能
第二只羽毛9 小时前
主题爬虫采集主题新闻信息
大数据·爬虫·python·网络爬虫
Elastic 中国社区官方博客9 小时前
ES|QL 在 9.2:智能查找连接和时间序列支持
大数据·数据库·人工智能·sql·elasticsearch·搜索引擎·全文检索
知秋正在99610 小时前
ElasticSearch服务端报错:FileSystemException: No space left on device
大数据·elasticsearch·搜索引擎