Elastic Stack核心技术实战02--Elasticsearch中的Domain Specific Language详解
上一篇博客中给大家介绍了Elasticsearch单机版的环境搭建以及简单的增删改查,今天我们就来学习一下Elasticsearch的Domain Specific Language,也就是我们常说的DSL查询。在es中以JSON的格式出现。
在此之前先给大家介绍一下分词器,首先我们安装的es版本是6.5.4,所以我们准备好对应版本的ik分词器,并将解压放到es的plugins目录下,如下图所示:
解压完成之后我们只需要重新启动es即可。启动成功之后我们在浏览器中通过kibana来进行测试。如下图所示:
大家可以分别执行以下上面的两条语句,看看分词之后的下效果有什么不同。这里先提前说明一下我遇到的坑,在es6.x的版本中String类型的数据主要分为text和keyword两种。前者支持分词,后者不建议分析,主要用于修饰一些不需要分析的字段。加入我们想要的对keyword进行分词的话,很遗憾,如下图所示:
es报错了,所以我们在开发中,一般会将需要分词的字段用text,不想需要分词的使用keyword。好了,下面给大家来介绍一下es中的数据类型。如下所示:
字符串型:text、keyword数值型:long、integer、short、byte、double、float、half_float、scaled_float日期类型:date布尔类型:boolean二进制类型:binary范围类型:integer_range、float_range、long_range、double_range、date_range
还以一些复杂的数据类型:数组类型:array 、对象类型:object 、嵌套类型:nested object。下面我们来自定义一个Mapping,深入的研究一下今天的主题---es中的Domain Specific Language。
首先我们创建一个mapping,语法如下所示:
PUT martial_arts
{"mappings": {"_doc":{"properties":{"name":{"type": "keyword"},"sex":{"type" : "integer"},"age":{"type":"integer"},"force":{"type":"double"},"girlfriend":{"type":"keyword"},"novel":{"type":"keyword"},"hobby":{"type":"text","analyzer":"ik_max_word"},"home":{"type":"text","analyzer":"ik_smart"}}}}
}
接着我们可以添加数据, 我们依次添加7条数据,如下图所示(查询语句下面先以截图的形式展示,具体的DSL语言会在最后面粘贴出来):
然后我们查询一下,GET /martial_arts/_search或者GET /martial_arts/_doc/_search都可以。
一共有7条数据。接下来我们就先来学习一下 全词匹配filter的使用方法。例如我们要查询出天龙八部中的人,可以编写如下的DSL
其中filter中使用term来包含查询的关键词, 同样的我们也可以查询射雕中的人物。好了,接下来我们再来看看分词匹配怎么使用,我们搜索会降龙十八掌的人有哪些:
这里我们很意外的我发现了一个问题,为什么归海一刀会出现在结果集中呢。我们知道hobby这字段设置成了ik_max_word,也就是最大程度的拆分,我们来看一下降龙十八掌差分之后的情况:
我们线最后有一个掌字,应该就是这个掌字匹配上了归海一刀的如来神掌。好吧,我们接下来用十八来试试
我们发现依然可以查询出来郭靖和萧峰两个人。我们再按照home字段来搜索
好了,接下来我们来试试更加复杂的查询,我们来查询在倚天屠龙记里面hobby里面带有白骨的人,如下图所示:
好了,查询出来了一个周芷若。我们再来看一下在倚天屠龙记中,hobby里面带有拳字的人
好了,这就是先按全词匹配,然后再结果集中在做分词匹配,稍微复杂一点的查询。下面我们继续学习更加复杂的查询,按小说分组来分组,并统计每个小说中人的个数:
好吧,既然聊到了分组,那怎么少得了聚合呢。下面来看看聚合函数的用法
我们发现出现了一点小意外,数据似乎不是我们想要的,于是查看了一下官网上的文档,这样这样写不对,于是做了以下的修改:
好了,关于这种复杂的查询语法,大家可以自行去查看文档这里给出官网地址:https://www.elastic.co/cn/
关于DSL(Domain Specific Language)的使用就先给大家介绍这么多了,明天我们学习一下怎么使用Java语言去调用es的api来实现查询的功能。好了,下面给出上图中的具体的语句:
GET _analyze
{"text":"降龙十八掌","analyzer": "ik_max_word"
}GET _analyze
{"text":"爱因斯坦的舅舅是哈根达斯","analyzer": "ik_smart"
}GET _analyze
{"keyword":"爱因斯坦的舅舅是哈根达斯","analyzer": "ik_smart"
}DELETE martial_artsPUT martial_arts
{"mappings": {"_doc":{"properties":{"name":{"type": "keyword"},"sex":{"type" : "integer"},"age":{"type":"integer"},"force":{"type":"double"},"girlfriend":{"type":"keyword"},"novel":{"type":"keyword"},"hobby":{"type":"text","analyzer":"ik_max_word"},"home":{"type":"text","analyzer":"ik_smart"}}}}
}GET /_cat/indices?vPUT /martial_arts/_doc/001
{"name":"张无忌","sex":1,"age":22,"force":8.9,"girlfriend":"赵敏","novel":"倚天屠龙记","hobby":"乾坤大挪移、九阳神功、七伤拳","home":"武当山"
}PUT /martial_arts/_doc/002
{"name":"归海一刀","sex":1,"age":24,"force":9.3,"girlfriend":"叶璇","novel":"天下第一","hobby":"阿鼻三刀、霸刀、如来神掌","home":"北京"
}PUT /martial_arts/_doc/003
{"name":"萧峰","sex":1,"age":26,"force":9.0,"girlfriend":"阿朱","novel":"天龙八部","hobby":"降龙十八掌、打狗棒法","home":"五台山"
}PUT /martial_arts/_doc/004
{"name":"郭靖","sex":1,"age":45,"force":8.5,"girlfriend":"黄蓉","novel":"射雕英雄传","hobby":"降龙十八掌","home":"湖北襄阳"
}PUT /martial_arts/_doc/005
{"name":"杨逍","sex":1,"age":40,"force":8.5,"girlfriend":"纪晓芙","novel":"倚天屠龙记","hobby":"乾坤大挪移、弹指神功、黯然销魂拳","home":"昆仑山"
}PUT /martial_arts/_doc/006
{"name":"朱铁胆","sex":1,"age":50,"force":9.5,"girlfriend":"素心","novel":"天下第一","hobby":"吸功大法,霸王拳,九阳神功","home":"北京"
}PUT /martial_arts/_doc/007
{"name":"段誉","sex":1,"age":22,"force":8.5,"girlfriend":"王语嫣","novel":"天龙八部","hobby":"六脉神剑","home":"云南大理"
}PUT /martial_arts/_doc/008
{"name":"周芷若","sex":0,"age":18,"force":7.5,"girlfriend":"张无忌、宋青书","novel":"倚天屠龙记","hobby":"九阴白骨爪、九阴真经","home":"四川峨嵋山"
}PUT /martial_arts/_doc/009
{"name":"赵敏","sex":0,"age":18,"force":7.0,"girlfriend":"张无忌","novel":"倚天屠龙记","hobby":"七伤拳、大力金刚指、玄冥神功","home":"内蒙古"
}GET /martial_arts/_doc/_search
{"query":{"bool":{"filter":{"term":{"girlfriend" : "阿朱"}}}}
}GET /martial_arts/_doc/_search
{"query":{"match":{"home":"北京"}}
}GET /martial_arts/_doc/_search
{"query":{"bool":{"filter":{"term":{"novel" : "倚天屠龙记"}},"must":[{"match":{"hobby":"拳"}}]}}
}GET /martial_arts/_doc/_search
{"aggs":{"count with novel":{"terms":{"field":"novel"},"aggs":{"max_force":{"max":{"field":"force"}}}}}
}
Elastic Stack核心技术实战02--Elasticsearch中的Domain Specific Language详解相关推荐
- Elastic Stack核心技术实战01--Elasticsearch环境搭建与基础入门
相信大家对于ELK并不陌生吧,大家在工作中一定都接触过Elasticsearch这个搜索引擎,ELK技术栈就是Elasticsearch和Logstash以及Kibana三个组件共同组成的,但是随着后 ...
- Elasticsearch中字段类型(Field Type)详解
ElasticSearch 7.7 字段类型(Field datatype)详解 字符串, object, 数值, 日期, 数组, 0x00 字符串: text, keyword 5.0以后,stri ...
- 手机摄影中多摄融合理论详解与代码实战
转载AI Studio项目链接https://aistudio.baidu.com/aistudio/projectdetail/3465839 手机摄影中多摄融合理论详解与代码实战 前言 从20 ...
- Keras深度学习实战(4)——深度学习中常用激活函数和损失函数详解
Keras深度学习实战(4)--深度学习中常用激活函数和损失函数详解 常用激活函数 Sigmoid 激活函数 Tanh 激活函数 ReLU 激活函数 线性激活函数 Softmax 激活函数 损失函数 ...
- Elasticsearch 7.X data stream 深入详解
直接从一个新概念的认知过程说下 elasticsearch data stream. 记得第一次听到 data stream 的时候,还是去年下半年在公交大巴车上早 8 点听魏彬老师的直播,后来就一直 ...
- 【elasticsearch】Elasticsearch 7.X Scripting 脚本使用详解
1.概述 转载:Elasticsearch 7.X Scripting脚本使用详解 0.题记 除了官方文档,其他能找到的介绍Elasticsearch脚本(Scripting)的资料少之又少. 一方面 ...
- Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...
- 加载vue文件步骤_vue中.vue文件解析步骤详解
这次给大家带来vue中.vue文件解析步骤详解,vue中.vue文件解析的注意事项有哪些,下面就是实战案例,一起来看一下. 我们平时写的 .vue 文件称为 SFC(Single File Compo ...
- iOS中的HotFix方案总结详解
iOS中的HotFix方案总结详解 相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dy ...
最新文章
- 金邦黑金刚4G内存 VS Vista系统
- SAP QM 激活01检验类型的前提下无Vendor CoA则不允许收货过账
- ITK:对多个线程上的数据进行操作以利用多核处理器
- 等差区间 线段树+GCD
- PHP中全局变量的使用global和$GLOBALS[]
- 在飞音G801上运行OpenWRT+Asterisk
- c#设置开机自动启动程序本篇文章来源于:
- iOS开发之使用Git的基本使用(二)
- oracle hanganalyze的用法以及trace文件分析(通过library cache pin和lock)
- adb工具的使用方法详解
- 计算机在欢迎进不到桌面,电脑一直在欢迎界面进不去怎么解决_电脑开机一直卡在欢迎界面怎么办-win7之家...
- 面向对象概念及对象、抽象、类的解释
- 启动模式,BOOT0和BOOT1详解
- 运维自动化之----ansible中play的高级用法模板(7)
- Android TextView 文字两端对齐
- 彩灯循环控制系统 电路与电子技术 课程设计
- Python + Selenium(九)- 解决图片验证码登录或注册问题
- MySQL8.0.22安装及配置(超详细)
- 《DFQ》开发随录——后记
- 矩阵三元组的快速转置