话题中间件与数据库 › Elasticsearch

中间件与数据库:Elasticsearch

Search indexing optimisation

Learn about the different optimisation techniques when building a search index.

基于MySQL binlog日志,实现Elasticsearch近实时同步实践

在我们的开发过程中,经常会在一个项目中使用多种数据库系统。在一些特定场景下,我们希望把数据从一种数据库,同步到另一种异构的数据库,以便进行数据分析统计、完成实时监控、实时搜索等功能。这个异构数据源同步的过程称为Change Data Capture(变化数据捕获)。

我们本文讨论的是Source为MySQL、Target为ElasticSearch的场景下,进行增量和全量同步操作过程。众所周知,MySQL数据库凭借其性能卓越、服务稳定、开放源代码、社区活跃等因素,成为当下最流行的关系型数据库,但是在数据量级较大或涉及到多表操作时,亦或是需要根据地理位置进行查询时,MySQL通常不能给我们很好的支持。

为了解决MySQL查询缓慢、无法查询的问题,我们通常采用ElasticSearch等进行配合检索。在传统方式中,将MySQL同步数据到ElasticSearch通常采用的是双写、MQ消息等形式,这些形式都存在着耦合高、性能差、丢失数据等风险。

所以我们需要探索出一套对业务无侵入的MySQL同步至ElasticSearch异构数据库的解决方案。本文将分别从增量同步、全量同步两个层面进行探讨。

Elasticsearch 线上问题排查——搞一天了,明天还要给客户解决这个问题

Elasticsearch 线上实战问题排查复盘。

如何从 0 到 1 搭建代码全局检索系统

前端团队的项目有几百个左右,想要查找某个接口 API 或者某个 NPM 包以及一些关键词在哪些项目中使用到,需要每个开发同学在自己维护的项目里全局搜索一遍或者写个脚本跑一遍,然后统计上去,费时费力。本文将为你介绍全局检索系统。

Elasticsearch 字段膨胀不要怕,Flattened 类型解千愁!

Elasticsearch Mapping 如果不做特殊设置,默认为 dynamic。dynamic 的本质就是:不加约束的动态添加字段。这样对某些日志场景,可能会产生大量的未知字段。字段如果持续激增,就会达到 Elasticsearch Mapping 层面的默认上限,对应设置和默认大小为:index.mapping.total_fields.limit:1000。

我们把这种非预期字段激增的现象或结果称为:字段膨胀。

拿自己线上环境示例,说一下 dynamic 的副作用。在一个实际业务环境,混淆了检索和写入的语法,会导致将检索语句动态认定为新增 Mapping 字段。

当然,如果是非常复杂的大 bool 检索语句,会导致 Mapping 变得非常复杂甚至会出现字段膨胀的情况。

Elasticsearch ORM框架

在使用Elasticsearch的过程中,你还在为构建Elasticsearch的DSL语句而苦恼?还在为构建复杂冗长的条件而头疼?还在为一次次的响应提取而奔溃?那么你需要一个简单方便易上手的ES ORM框架:ebatis!

Composite 聚合——Elasticsearch 聚合后分页新实现

在常规检索的基础上,用户期望返回基于特定字段的聚合结果,且用户期望分页查看检索和聚合结果。

如下图所示:以2020东京奥运会热点新闻亚洲飞人"苏炳添”为例,用户期望查看有关“苏炳添”的新闻,同时期望查看相同标题的相似文章列表。

Elasticsearch 设置默认值的三种方式

在使用 Elasticsearch 过程中,不免还会有 Mysql 等关系型数据库的使用痕迹,以下两个都是实战开发问到的问题:

  • Elasticsearch 新增字段,能在 Mapping 设置默认值吗?
  • Elasticsearch 有什么好的方式维护文档的 create_time (创建时间)和 update_time (更新时间)吗?

本文就从 Elasticsearch 默认值的实现方案说开去。

拆解一个 Elasticsearch Nested 类型复杂查询问题

有个复杂的场景涉及到按照求和后过滤,user_id是用户编号,gender是性别,time_label是时间标签,时间标签是nested结构,intent_order_count是意向订单数量,time是对应时间。

现在要筛选出在20210510~20210610,意向订单数总和为26的男性用户,请问应该怎么写dsl语句?

感觉这个场景很复杂,涉及到array判断后求和,然后求和结果做筛选条件。

Elasticsearch 索引生命周期管理 ILM 实战指南

关于人生,有人这么说:“人,生来一个人,死去一个人,所以,人生就是一个人生老病死的简称。”

在基于日志、指标、实时时间序列的大型系统中,集群的索引也具备类似上图中相通的属性,一个索引自创建之后,不可能无限期的存在下去, 从索引产生到索引“消亡”,也会经历:“生、老、病、死”的阶段。

我们把索引的“生、老、病、死”的全过程类比称为索引的生命周期。

ElasticSearch 海量数据查询性能优化

用好文件缓存是关键。

全方位深度解读 Elasticsearch 分页查询

问题1:想请问下,一次性获取索引上的某个字段的所有值(100 万左右),除了把 max_result_window 调大 ,还有没有啥方法?

问题2:关于 es 的分页,每次拿 20 条展示在前台,然后点击下一页,在查询后面的20条数据,应该要怎么写?

问题3:From+size、Scroll、search_after 的本质区别和应用场景分别是什么?

ElasticSearch 如何使用 TDigest 算法计算亿级数据的百分位数?

聚合分析中较为常见的 percentiles 百分位数分析。n 个数据按数值大小排列,处于 p% 位置的值称第 p 百分位数。比如说,每次网站请求访问的耗时,需要统计其 TP99,也就是整体请求中的 99% 的请求的最长耗时。

ElasticSearch 如何使用 ik 进行中文分词?

本篇文章着重分析 ElasticSearch 在全文搜索前如何使用 ik 进行分词,让大家对 ElasticSearch 的全文搜索和 ik 中文分词原理有一个全面且深入的了解。

Elasticsearch:从写入原理谈写入优化

Elasticsearch 写入问题涉及写入流程、写入原理及优化策略。

Elasticsearch 警惕使用 wildcard 检索!然后呢?

在寻求解决方案的时候,我们要先问一下:为什么大家喜欢用 wildcard 实现模糊检索?

得到的答复往往是:顺手,类似Mysql like 查询,短、平、快的达到了产品经理的要求,满足了项目需求。

但,这忽略了性能问题以及可能带来的灾难后果。

所以,解决方案应该从根源上入手,以寻求彻底解决。

首页 - Wiki
Copyright © 2011-2025 iteam. Current version is 2.145.0. UTC+08:00, 2025-08-25 04:57
浙ICP备14020137号-1 $访客地图$