上一篇博客中给大家介绍了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详解相关推荐

  1. Elastic Stack核心技术实战01--Elasticsearch环境搭建与基础入门

    相信大家对于ELK并不陌生吧,大家在工作中一定都接触过Elasticsearch这个搜索引擎,ELK技术栈就是Elasticsearch和Logstash以及Kibana三个组件共同组成的,但是随着后 ...

  2. Elasticsearch中字段类型(Field Type)详解

    ElasticSearch 7.7 字段类型(Field datatype)详解 字符串, object, 数值, 日期, 数组, 0x00 字符串: text, keyword 5.0以后,stri ...

  3. 手机摄影中多摄融合理论详解与代码实战

    转载AI Studio项目链接https://aistudio.baidu.com/aistudio/projectdetail/3465839 手机摄影中多摄融合理论详解与代码实战 前言   从20 ...

  4. Keras深度学习实战(4)——深度学习中常用激活函数和损失函数详解

    Keras深度学习实战(4)--深度学习中常用激活函数和损失函数详解 常用激活函数 Sigmoid 激活函数 Tanh 激活函数 ReLU 激活函数 线性激活函数 Softmax 激活函数 损失函数 ...

  5. Elasticsearch 7.X data stream 深入详解

    直接从一个新概念的认知过程说下 elasticsearch data stream. 记得第一次听到 data stream 的时候,还是去年下半年在公交大巴车上早 8 点听魏彬老师的直播,后来就一直 ...

  6. 【elasticsearch】Elasticsearch 7.X Scripting 脚本使用详解

    1.概述 转载:Elasticsearch 7.X Scripting脚本使用详解 0.题记 除了官方文档,其他能找到的介绍Elasticsearch脚本(Scripting)的资料少之又少. 一方面 ...

  7. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

       本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...

  8. 加载vue文件步骤_vue中.vue文件解析步骤详解

    这次给大家带来vue中.vue文件解析步骤详解,vue中.vue文件解析的注意事项有哪些,下面就是实战案例,一起来看一下. 我们平时写的 .vue 文件称为 SFC(Single File Compo ...

  9. iOS中的HotFix方案总结详解

    iOS中的HotFix方案总结详解 相信HotFix大家应该都很熟悉了,今天主要对于最近调研的一些方案做一些总结.iOS中的HotFix方案大致可以分为四种: WaxPatch(Alibaba) Dy ...

最新文章

  1. 金邦黑金刚4G内存 VS Vista系统
  2. SAP QM 激活01检验类型的前提下无Vendor CoA则不允许收货过账
  3. ITK:对多个线程上的数据进行操作以利用多核处理器
  4. 等差区间 线段树+GCD
  5. PHP中全局变量的使用global和$GLOBALS[]
  6. 在飞音G801上运行OpenWRT+Asterisk
  7. c#设置开机自动启动程序本篇文章来源于:
  8. iOS开发之使用Git的基本使用(二)
  9. oracle hanganalyze的用法以及trace文件分析(通过library cache pin和lock)
  10. adb工具的使用方法详解
  11. 计算机在欢迎进不到桌面,电脑一直在欢迎界面进不去怎么解决_电脑开机一直卡在欢迎界面怎么办-win7之家...
  12. 面向对象概念及对象、抽象、类的解释
  13. 启动模式,BOOT0和BOOT1详解
  14. 运维自动化之----ansible中play的高级用法模板(7)
  15. Android TextView 文字两端对齐
  16. 彩灯循环控制系统 电路与电子技术 课程设计
  17. Python + Selenium(九)- 解决图片验证码登录或注册问题
  18. MySQL8.0.22安装及配置(超详细)
  19. 《DFQ》开发随录——后记
  20. 矩阵三元组的快速转置

热门文章

  1. STM32F103C8T6编码器电机的使用
  2. 使用poi进行excel导出复杂表头的设计
  3. 网络虚拟化——vhost
  4. 学生使用计算机英语作文60字,小学生介绍自己的英语作文60字
  5. Linux下用SCP免密传输文件设置
  6. Java百度地图教程:地图专题导学前言
  7. ajax两个html传值,关于ajax传值方式的页面跳转问题
  8. DW的快捷键介绍及简单的应用
  9. 论文阅读《Bidirectional LSTM-CRF Models for Sequence Tagging》
  10. MySQL基础总结(上)