Elasticsearch学习笔记

9 篇文章 8 订阅
9 篇文章 0 订阅

资料收集

公司组件文档
公司ES组件介绍:包含最佳实践案例、SDK API介绍、多机房容灾部署、ES平台架构等,协助公司开发迅速使用。

ES官方权威指南文档
英文最新版权威指南

基础概念与原理

概念入门

很赞很细有实例的一篇文章:
搜索引擎原理以及ES原理漫画讲解

ES入门教程
全部是最基本的操作,有个感觉。

一、安装教程

二、基本概念
注意点:

  1. Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。
    所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。
  2. Document 可以分组,比如weather这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 Document。不同的 Type 应该有相似的结构(schema)。

三、基础命令(第三、五、六部分)
1,CRUD Index、Type、Document(row)等:这部分大多数是在数据同步时候使用。
2,业务上对ES的使用主要集中在查询中
底层调用命令是种crul执行的,类似于rest api的方式与ES进行交互。

四、中文分词设置
不同组件有不同分词断句的算法

Elasticsearch概念与MySQL对应

Elasticsearch概念与MySQL对应关系表

在这里插入图片描述

  1. 单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。
  2. MySQL 中一个数据库下面有 N 张表(Table),等价于1个索引 Index 下面有 N 多类型(Type)。
  3. MySQL 中一个数据库表(Table)下的数据由多行(Row)多列(column,属性)组成,等价于1个 Type 由多个文档(Document)和多 Field 组成。
  4. MySQL 中定义表结构、设定字段类型等价于 ES 中的 Mapping。举例说明,在一个关系型数据库里面,Schema 定义了表、每个表的字段,还有表和字段之间的关系。与之对应的,在 ES 中,Mapping 定义索引下的 Type 的字段处理规则,即索引如何建立、索引类型、是否保存原始索引 JSON 文档、是否压缩原始 JSON 文档、是否需要分词处理、如何进行分词处理等。
  5. MySQL 中的增 insert、删 delete、改 update、查 search 操作等价于 ES 中的增 PUT/POST、删 Delete、改 _update、查 GET。其中的修改指定条件的更新 update 等价于 ES 中的 update_by_query,指定条件的删除等价于 ES 中的 delete_by_query。
  6. MySQL 中的 group by、avg、sum 等函数类似于 ES 中的 Aggregations 的部分特性。
  7. MySQL 中的去重 distinct 类似 ES 中的 cardinality 操作。
  8. MySQL 中的数据迁移等价于 ES 中的 reindex 操作。

倒排索引

与索引表的概念某种程度上是相通的。
搜索引擎原理以及ES原理漫画讲解
倒排索引原理与一个实例:倒排索引通用概念以及一个倒排索引文档建立的例子,ES的实现不是用文中最后介绍的方法实现的。
倒排索引介绍文档
在这里插入图片描述

ES聚焦在倒排索引数据结构的优化,引入了字典树优化term dictionary,使用FST压缩term dictionary,通过roaring bitmaps优化posting list、通过跳表 + bitset完成联合索引的查询优化。
ES对倒排索引的优化
在这里插入图片描述
在这里插入图片描述

字典树优化:1,便于字段查找。2,减少磁盘存储空间。

scroll与scan理解

scroll存在的原因与API最简demo
在默认情况下,ES查询每次返回的数量最多只有1W条,且只能是前1W条.
这意味着,在不修改配置的情况下,想通过分页的方式(如下)拿到1W条之后的数据是做不到的

Scroll讲解与实例

scroll与scan结合的demo
scroll本身有排序的步骤,如果对于接口的时序性没有要求的话,加上scan。只是拉取命中的结果,但是不会去进行排序操作。

最佳实践文章

ES最佳实践
见笔记。
ES高危操作汇总

API

Elasticsearch Java Rest Client API 整理总结 (一)——Document API
RestClientBuilder设置详解:setHttpClientConfigCallback设置超时、线程数、基本认证、加密通信、嗅探器sniff等设置。

Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries
Java QueryBuilders常见用法:常见几种query的实例demo

操作中的相关概念:
must、should、must_not

client demo

public EsClient(CommonEsProperties esProperties) {
        this.esProperties = esProperties;
        buildClient(esProperties);
    }
private void buildClient(CommonEsProperties properties) {
        IOReactorConfig reactorConfig = IOReactorConfig.custom()
                .setConnectTimeout(6000)
                .setSoTimeout(6000).build();

        RestClientBuilder restClientBuilder = RestClient
                .builder(psm, NodeTypeEnum.DATA)
                .setRequestConfigCallback(builder -> {
                    builder.setSocketTimeout(6000);
                    builder.setConnectTimeout(6000);
                    builder.setConnectionRequestTimeout(6000);
                    return builder;
                }).setHttpClientConfigCallback(config ->
                        config.setKeepAliveStrategy((response, context) -> 30000)
                                .setDefaultIOReactorConfig(reactorConfig)
                                .setMaxConnPerRoute(8)
                                .setMaxConnTotal(32)
                );

        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(restClientBuilder);

        RestClient lowLevelClient = restHighLevelClient.getLowLevelClient()
                .setTraceIdGenerator(IdUtil::getId)
                .setMetricsPrefix("");

        this.restHighLevelClient = restHighLevelClient;
        this.sniffer = Sniffer.builder(lowLevelClient)
                .setSniffIntervalMillis(30000)
                .build();
    }

search demo

待续

读从库demo

待续

MySQL同步ES

数据一致性问题主流解决方案

非常好的讲解一致性问题的帖子:
MySQL与ES之间的数据一致性问题
MySQL 数据实时同步到 Elasticsearch 的技术方案选型和思考
分不清谁是原创。。。

总结:

  1. MySQL数据库资源非常宝贵,希望DB的操作尽可能集中在复杂的CUD上,复杂的查询操作借助于ES进行实现。因此会引出一致性的问题,即DB的更新是否能立即同步到ES上。
    主流的方式:数据迁移同步工具。
  2. 数据库去规范化对于快捷查询的好处:通过字段冗余,避免多个表之间的联合查询。也避免同步时要更新多个表。
    主要内容:1,去规范化的动机。2,去规范化的几种方式(主查询表列冗余、宽表预构建/应用多写/物化视图/数据迁移同步工具)。
    其中,物化视图的介绍帖子:数据库view与物化视图
  3. 主要的数据迁移同步模型:订阅消费模式、端到端直连模式
  4. 同步存在的问题:ES设计(类型选择:objected(全部扁平化的问题)、nested(保持一定的关联关系,牺牲部分写入性能)、join(影响搜索性能))。
    join 适合写多读少场景,更加适合关注索引性能的场景。这意味着更新的生效会更快,但是搜索时的开销也相对大些;nested 适合读多写少的场景,保持一定关联关系的同时更加关注搜索的性能。
  5. MySQL 到 ES 实时数据同步实现去规范化,推荐方式:多表订阅合并预构建宽表数据
  6. 数据迁移同步工具选型

其他(TODO)

待学习与搜索内容:ELK框架

  1. Kibana 是为 Elasticsearch 集群上的內容提供了友好的 Web 界面,可以帮助你汇总、分析和搜索重要数据。
  2. ES读写数据过程
  3. 23个最有用的ES检索技巧(Java API实现)
elasticsearch 学习笔记包括以下内容: 一、Elasticsearch概述: - Elasticsearch是一种开源的分布式搜索和分析引擎,可以用于快速搜索、分析和存储大量的结构化和非结构化数据。 - Elasticsearch与Solr相比有一些区别,包括用户、开发和贡献者社区的规模和成熟度等方面。 二、Elasticsearch安装: 1. 下载Elasticsearch,可以从官方网站或华为云镜像下载。 2. 安装Elasticsearch。 三、安装head插件: - head插件是一个可视化的管理界面,可以方便地管理和监控Elasticsearch集群。 四、安装Kibana: 1. Kibana是一个开源的数据可视化工具,用于展示和分析Elasticsearch中的数据。 2. 下载Kibana并安装。 3. 启动Kibana并进行访问测试。 4. 可选的汉化操作。 五、ES核心概念理解: - 学习ES的核心概念,包括索引、文档、映射、查询等。 以上是elasticsearch学习笔记的主要内容,希望对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Elasticsearch 学习笔记(上)](https://blog.csdn.net/m0_52691962/article/details/127064350)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值