上一篇博客中给大家介绍了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. AI设计的新启发 | 什么是用户体验中台?
  2. RabbitMQ的五种工作方式详细
  3. php mysql 超时时间_php mysql超时设置方法
  4. synchronized的基本认识
  5. java jdbc dao_Java自学-JDBC DAO
  6. php多个请求只执行一次,php使用redis的blPop/brPop,一台服务器多个并发,也只能一次一次执行?...
  7. php 往sftp发送文件夹,通过PHP将文件上传到SFTP服务器(phpseclib)
  8. linux服务网卡速率查看,linux 下查看网卡工作速率
  9. vue仿微博评论回复_js模拟回帖/微博评论功能案例
  10. 臭氧9母带处理工具:iZotope Ozone 9 Advanced for Mac
  11. 三级网络技术综合、应用题(2019、3)
  12. 恩智浦智能车主控板分享
  13. qq2018旧版本7.3.1下载_QQ旧版本2018下载
  14. sqlilabs Less-8 盲注浅学习
  15. 《用户至上:用户研究方法与实践(原书第2版)》一2.1 概述
  16. 【windows 10】 Microsoft Store 安装软件闪退的解决办法
  17. 松下幸之助语录-2011
  18. 从1到n年中的闰年个数判断
  19. 【youcans 的 OpenCV 学习课】7. 空间域图像滤波
  20. 美团和大众点评早期分别以交易和用户评价进军团购行业

热门文章

  1. matplotlib图中显示指定点的坐标
  2. Linux 下的数框框任务管理器 - 仿Win10 风格的SysMonTask
  3. 个人与组织在声誉风险管理上的关系是双向统一的
  4. 租用服务器时,如何选择一家靠谱的IDC服务商
  5. 华为鸿蒙这个年度总结,才应该刷爆朋友圈
  6. 目录扫描工具 dirbuster
  7. 辟谣!男程序员都是秃头,女程序员满脸痘痘
  8. 环信即时通讯SDK集成——快速跑通环信IM Android Demo
  9. 计算机毕业设计Java博物馆交流平台(源码+系统+mysql数据库+lw文档)
  10. 零基础学python的时间