弹性搜索解决方案-请出示您的DSL。
在业务发展中,我们往往会陷入发展的细节中,而忽略了事物的本源。
学生经常问:
等等,等等.....
以上看似复杂的问题,如果转换成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.你的公司需要引入实时计算引擎吗?