elasticsearch解决问题之道——请亮出你的dsl

author author     2023-05-05     275

关键词:

参考技术A

0、引言

在业务开发中,我们往往会陷入开发的细枝末节之中,而忽略了事物的本源。

经常有同学问到:

等等等等…..

以上的看似复杂的问题,如果转换成DSL,清楚的写出来,梳理清楚问题的来龙去脉,问题就自然解决了一大半。

所以,请亮出你的dsl,不论什么语言的检索,转换到es查询都是sql查询,在es中对应dsl语法,es再拆解比如:分词match_phrase拆解成各term组合,最终传给lucene处理。

亮出你的dsl,确保编程里的实现和你的kibana或者head插件一致是非常重要、很容易被忽视的工作。

如果对dsl拆解不理解,那就再 加上 profile:true或者explain:true拆解结果一目了然。

维基百科定义:领域特定语言(英语:domain-specific language、DSL)指的是专注于某个应用程序领域的计算机语言。又译作领域专用语言。

Elasticsearch提供基于JSON的完整查询DSL来定义查询。 将Query DSL视为查询的AST(抽象语法树),由两种类型的子句组成:

1、叶子查询子句

叶查询子句查找特定字段中的特定值,例如匹配,术语或范围查询。 这些查询可以单独使用。

2、复合查询子句

复合查询子句可以组合其他叶子或复合查询,用于以逻辑方式组合多个查询(例如bool或dis_max查询),或更改其行为(例如constant_score查询)。

给个例子,一看就明白。

看到这里,可能会有人着急了:“我X,这不是官网定义吗?再写一遍有意思吗?”

引用一句鸡汤话,“再显而易见的道理,在中国,至少有一亿人不知道”。同样的,再显而易见的问题,在Elasticsearch技术社区也会有N多人提问。

基础认知不怕重复,可怕的是对基础的专研、打磨、夯实。

Elasticsearch相关的核心操作,广义上可做如下解读,不一定涵盖全,仅抛砖引玉,说明DSL的重要性。

从大到小。

集群的管理,一般我们会使用Kibana或者第三方工具Head插件、cerebro工具、elastic-hq工具。

基本上硬件的(磁盘、cpu、内存)使用率、集群的 健康 状态都能一目了然。

但基础的DSL会更便捷,便于细粒度分析问题。

如:集群状态查询:

如:节点热点线程查看:

如:集群分片分配情况查看:

索引生命周期是一直强调的概念,主要指索引的“生、老、病、死”的全过程链条的管理。

创建索引我们优先使用较单纯index更灵活的template模板。

创建索引类似Mysql的创建表的操作,提前设计好表结构对应ES是提前设计好M app ing非常重要。

两个维度:

举例:

如:索引清理缓存。

如:某原因导致分片重新分配,_recovery查看分片分配状态。

高版本的索引生命周期管理推荐使用:ILM功能。

这个是大家再熟悉不过的了。

举例:

删除数据包括:指定id删除 delete和批量删除delete_by_query(满足给定条件)。

更新操作。包括:指定id的update/upsert或者批量更新update_by_query。

这是ES的重头戏。包含但不限于:

1、支持精确匹配查询的:term、range、exists、wildcard、prefix、fuzzy等。

2、支持全文检索的:match、match_phrase、query_string、multi_match等

1、Bucketing分桶聚合

举例:最常用的terms就类似Mysql group by功能。2、Metric计算聚合

举例:类比Mysql中的: MIN, MAX, SUM 操作。3、Pipeline针对聚合结果聚合

举例:bucket_script实现类似Mysql的group by 后having的操作。

留给大家 结合 业务场景思考添加。

这里把开头提到的几个问题逐一解答一下。

实际Mysql业务中,我们一般是先验证sql没有问题,再写业务代码。

实际ES业务中,也一样,先DSL确认没有问题,再写业务代码。

写完java或者python后,打印DSL,核对是否完全一致。

不一致的地方基本就是结果和预期不一致的原因所在。

第一步:借助analyzer API分析查询语句和待查询document分词结果。

这个API的重要性,再怎么强调都不为过。

第二步:可以借助profile:true查看细节。第三步:核对match_phrase词序的原理。

6.3版本后已经支持sql,如果不会写,可以借助translate 如下API翻译一下。

不够精确,但足够参考用了,需要根据业务细节微调。

当然,还是 建议 ,从业务出发,自己写DSL。

从大往小,逐步细化排解

END

公众号 ( zhisheng )里回复 面经、ES、Flink、 Spring、Java、Kafka、监控 等关键字可以查看更多关键字对应的文章

1、《从0到1学习Flink》—— Apache Flink 介绍

2、《从0到1学习Flink》—— Mac 上搭建 Flink 1.6.0 环境并构建运行简单程序入门

3、《从0到1学习Flink》—— Flink 配置文件详解

4、《从0到1学习Flink》—— Data Source 介绍

5、《从0到1学习Flink》—— 如何自定义 Data Source ?

6、《从0到1学习Flink》—— Data Sink 介绍

7、《从0到1学习Flink》—— 如何自定义 Data Sink ?

8、《从0到1学习Flink》—— Flink Data transformation(转换)

9、《从0到1学习Flink》—— 介绍 Flink 中的 Stream Windows

10、《从0到1学习Flink》—— Flink 中的几种 Time 详解

11、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 ElasticSearch

12、《从0到1学习Flink》—— Flink 项目如何运行?

13、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 Kafka

14、《从0到1学习Flink》—— Flink JobManager 高可用性配置

15、《从0到1学习Flink》—— Flink parallelism 和 Slot 介绍

16、《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL

17、《从0到1学习Flink》—— Flink 读取 Kafka 数据写入到 RabbitMQ

18、《从0到1学习Flink》—— 你上传的 jar 包藏到哪里去了

19、大数据“重磅炸弹”——实时计算框架 Flink

20、《Flink 源码解析》—— 源码编译运行

21、为什么说流处理即未来?

22、OPPO数据中台之基石:基于Flink SQL构建实数据仓库

23、流计算框架 Flink 与 Storm 的性能对比

24、Flink状态管理和容错机制介绍

25、原理解析 | Apache Flink 结合 Kafka 构建端到端的 Exactly-Once 处理

26、Apache Flink 是如何管理好内存的?

27、《从0到1学习Flink》——Flink 中这样管理配置,你知道?

28、《从0到1学习Flink》——Flink 不可以连续 Split(分流)?

29、Flink 从0到1学习—— 分享四本 Flink 的书和二十多篇 Paper 论文

30 、360深度实践:Flink与Storm协议级对比

31、Apache Flink 1.9 重大特性提前解读

32、如何基于Flink+TensorFlow打造实时智能异常检测平台?只看这一篇就够了

33、美团点评基于 Flink 的实时数仓建设实践

34、Flink 灵魂两百问,这谁顶得住?

35、一文搞懂 Flink 的 Exactly Once 和 At Least Once

36、你公司到底需不需要引入实时计算引擎?

解决问题的常规之道

...将当前机器下线重新申请,让我否决掉了。这是什么解决之道啊,你如果是个运维我也就不说了,你是个架构师& 查看详情

wordpress仪表盘畸形了有高手能告诉我解决之道否

有人知道那个文件时控制仪表盘的代码吗?参考技术A你用什么浏览器,如果你用的是IE登录,是这样的话,那么换谷歌浏览器试试,如果都这样,证明是程序问题,升级安装,或重新覆盖安装的话,就应该可以恢复。如果换浏览... 查看详情

代码简洁之道:一行python代码解决问题是时尚还是玄学

所谓一行流,就是把一个功能用一行代码去实现。Python的一行流既保证了代码的简洁,又不会牺牲很大的可读性。但一个看似如此简单的事情,如果不彻底掌握这门编程语言,是很难做到的。我认为,Python一... 查看详情

mac苹果灯亮出风口烫开不了机解决办法

...是苹果灯亮,出风口烫开不了机,后来很简单的解决了。之前同事也出现这个问题,被送到维修部一个星期才修好。解决办法:1、按住power键一会直到完全关机。2、按一下power键开机,这时候同时按住optionÿ... 查看详情

程序员投入时间和精力实现财富增长之道,这可能会伴随你程序员整个生涯(请不要连续点赞)

目录对于自由职业某些赏金计划 某些编程比赛成为在线讲师  查看详情

程序员投入时间和精力实现财富增长之道,这可能会伴随你程序员整个生涯(请不要连续点赞)

目录对于自由职业某些赏金计划 某些编程比赛成为在线讲师  查看详情

elasticsearch数据早8小时or晚8小时,你知道为什么吗,附解决方案(代码片段)

前言这篇文章,不会解释什么是本初子午线,只想以做实验的方式来理解数据差8小时的问题。下面就先说结论,再来谈原理。解决方案想必大家都很清楚:中国标准时间=UTC+8小时。那么所有和时区有关的地方,都有可能成为“... 查看详情

elasticsearch:lowdiskwatermark(代码片段)

你的Elasticsearch集群上有各种“水位”阈值。当一个节点上的磁盘填满时,要跨越的第一个阈值将是“低磁盘水位”。一旦超过此阈值,Elasticsearch集群将停止向该节点分配分片。这意味着你的集群可能会变黄。如何解决这... 查看详情

elasticsearch:lowdiskwatermark(代码片段)

你的Elasticsearch集群上有各种“水位”阈值。当一个节点上的磁盘填满时,要跨越的第一个阈值将是“低磁盘水位”。一旦超过此阈值,Elasticsearch集群将停止向该节点分配分片。这意味着你的集群可能会变黄。如何解决这... 查看详情

将数据从雪花迁移到elasticsearch

】将数据从雪花迁移到elasticsearch【英文标题】:Migratedatafromsnowflaketoelasticsearch【发布时间】:2019-06-0805:08:26【问题描述】:我们在我的项目中使用雪花数据仓库,我们想用Elasticsearch替换雪花作为项目增强POC的一部分,我没有找... 查看详情

无状态—你使用elasticsearch找到的新状态

作者:LeafLin,TimBrooks,QuinHoxie我们从何开始Elasticsearch的第一个版本于2010年作为分布式可扩展搜索引擎发布,允许用户快速搜索并显示关键见解。十二年和超过65,000次提交后,Elasticsearch继续为用户提供久经考... 查看详情

李嘉诚用人之道

...有上进心,一个有上进心的人,才会主动分析问题,寻求解决之道,主动抓住机会,进入更高的平台;2一个人是否投入企业,面对企业问题是否主动分析解决,而不是提出问题等着别人解决;3一个人是否可靠,可靠而不是忠诚... 查看详情

代码整洁之道

...我们程序员在阅读代码的过程中才像是正在阅读现实中的解决问题,我们写的 查看详情

elasticsearch:如何在django中使用elasticsearch(代码片段)

...级需求时,此解决方案可能会很慢且有问题。这就是Elasticsearch的用武之地。这是Django的Elasticsearch教程,可帮助你在项目中充分利用这个方便的搜索引擎。为什么要使用Elasticsearchÿ 查看详情

elasticsearch:如何在django中使用elasticsearch(代码片段)

...级需求时,此解决方案可能会很慢且有问题。这就是Elasticsearch的用武之地。这是Django的Elasticsearch教程,可帮助你在项目中充分利用这个方便的搜索引擎。为什么要使用Elasticsearchÿ 查看详情

当前页面已失效,请回到前一页面重新提交!这个问题你解决了吗?

...的发来看看。有些小故障自己多琢磨下,多动动手就可以解决的。 参考技术B妇女更年期症状真的太可怕了,我妈妈怎么这样不讲理呢?本回答被提问者采纳 参考技术C没有用了 查看详情

elasticsearch:使用pathhierarchytokenizer搜索层次结构(代码片段)

...介绍了如何解决一个常见问题,该问题通常通过使用Elasticsearch中称为路径层次结构tokenizer 的功能来查看不同的解决方案,从而通过父/子关系或递归关系来解决。你可以用这个覆解决什么用例?在我们深入研究之前&#... 查看详情

elasticsearch:使用pathhierarchytokenizer搜索层次结构(代码片段)

...介绍了如何解决一个常见问题,该问题通常通过使用Elasticsearch中称为路径层次结构tokenizer 的功能来查看不同的解决方案,从而通过父/子关系或递归关系来解决。你可以用这个覆解决什么用例?在我们深入研究之前&#... 查看详情