弹性搜索解决方案-请出示您的DSL。

0.介绍

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

学生经常问:

等等,等等.....

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

所以,请出示你的dsl。不管是什么语言的搜索,转换成es查询都是sql查询。在es中,它对应于dsl语法,然后es被分解成各种$ term组合,最后传递给lucene进行处理。

展示你的dsl,确保编程中的实现与你的kibana或head插件一致,这一点非常重要,也很容易被忽视。

如果不懂dsl反汇编,添加profile:true或者explain:true,反汇编结果一目了然。

维基百科定义:特定领域语言(DSL)是指专注于某个应用领域的计算机语言。也翻译成特定领域的语言。

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

1,叶查询子句

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

2.复合查询子句

复合查询子句可以组合其他叶或复合查询,以逻辑组合多个查询(如bool或dis_max查询)或更改它们的行为(如constant_score查询)。

举个例子,一目了然。

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

引用一句鸡汤,“很明显中国至少有一亿人不知道”。同样,这个显而易见的问题会被Elasticsearch技术社区的n多人问到。

基础认知不怕重复,可怕的是学习,打磨,夯实基础。

与Elasticsearch相关的核心操作可以从广义上解释如下,不一定涵盖全部,只是引火烧身,说明DSL的重要性。

从大到小。

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

基本上硬件(磁盘、cpu、内存)的利用率和集群的健康状况一目了然。

但是基本的DSL会更方便,更便于细粒度的分析。

如:集群状态查询:

如:节点热点线程视图:

如:对簇碎片分配的看法:

指标生命周期是一个一直被强调的概念,主要是指对指标“生、老、病、死”的全过程链的管理

在创建索引时,我们优先考虑使用比简单索引更灵活的模板模板。

创建索引类似于在Mysql中创建表的操作。预先设计一个与ES相对应的表结构是非常重要的。

两个维度:

例如:

如:索引清理缓存。

例如,如果由于某种原因碎片被重新分配,_recovery会检查碎片分配状态。

对于更高版本的索引生命周期管理,建议使用ILM函数。

这是大家都熟悉的。

例如:

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

更新操作。包括具有指定id的更新/更新插入或批量更新update_by_query。

这是ES的亮点。包括但不限于:

1,支持精确匹配查询的:$ term,range,exists,通配符,前缀,fuzzy等。

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

1,间歇聚合

例如,最常用的术语类似于Mysql的group by函数。2.度量计算聚合

例子:比较Mysql中min,max,sum的运算。3.管道根据聚合结果进行聚合。

例:bucket_script实现了类似Mysql的having after group by的操作。

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

在这里,我将逐一回答开头提到的问题。

在实际的Mysql业务中,我们通常会先验证sql没有问题,再写业务代码。

在实际的ES服务中,也是如此。DSL在写入服务代码之前确认没有问题。

写完java或者python,打印DSL,检查是否完全一样。

不一致基本上就是结果与预期不一致的原因。

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

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

第二步:可以借助profile:true查看详情。第三步:检查match_phrase词序原则。

从版本6.3开始就支持Sql。如果不会写,可以借助下面的API进行翻译。

不够准确,但足够参考,需要根据业务细节进行微调。

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

由大到小,逐步细化解决方案。

结束

在微信官方账号中,回复脸经、es、Flink、Spring、Java、Kafka、monitoring等关键词,即可查看更多与关键词对应的文章。

1,从0到1学习Flink——Flink简介》——阿帕奇Flink

2.从0到1学习Flink——在MAC上搭建Flink 1.6.0环境,搭建简单程序入门。

3.从0到1学习Flink-Flink配置文件详解

4.从0到1学习Flink数据源介绍

5.《学习Flink》——从0到1)——如何定制数据源?

6.从0到1学习Flink数据宿介绍

7.《学习Flink》——从0到1)——如何定制数据宿?

8.学习Flink从0到1-Flink数据转换。

9.从0到1学习Flink——Flink中的流窗口介绍。

10,从0到1学习Flink——几次Flink详解》——《Flink

11,从0到1学习Flink-Flink读取Kafka数据并写入ElasticSearch。

12,“从0到1学习Flink”——如何运行Flink项目?

13,从0到1学习Flink——Flink读取Kafka数据,写入Kafka。

14,学习Flink从0到1-Flink作业管理器高可用性配置

15,从0到1学习Flink—— Flink简介》——Flink平行度和槽

16,从0到1学习Flink——Flink读取Kafka数据,批量写入MySQL。

17,从0到1学习Flink——Flink读取Kafka数据,写入RabbitMQ。

18,《学习Flink》——从0到1”——你上传的jar包去哪了?

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

20、《Flink源代码分析》-源代码编译与运行

21.为什么流处理是未来?

22.OPPO数据平台的基石:基于Flink SQL构建真正的数据仓库。

23.Flink和Storm的性能比较。

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

25、原理分析| Apache Flink结合Kafka构建端到端恰好一次处理。

26.Apache Flink如何管理内存?

27.《从0到1学习Flink》——你知道这个管理配置Flink吗》——Flink?

28.“从0到1学习Flink”——Flink不能连续拆分?

29.Flink从0到1学习——分享4本Flink书籍,20多篇纸质论文。

30、360深度练习:Flink和Storm协议级别对比

提前解读31和Apache Flink 1.9的主要特性

32.如何构建基于Flink+TensorFlow的实时智能异常检测平台?光看这篇文章就够了。

33.美团点评基于Flink的实时仓建设实践。

34、Flink soul 200问,谁受得了?

35.确切地了解一次,至少了解一次弗林克。

36.你的公司需要引入实时计算引擎吗?