前言

简单的没挑战,来点复杂的,比如查看来自顾家的都有哪些人怎么查呢?elasticsearch提供两种查询方式:

查询字符串(query string),简单查询,就像是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索。

另外一种是通过DSL语句来进行查询,被称为DSL查询(Query DSL),DSL是Elasticsearch提供的一种丰富且灵活的查询语言,该语言以json请求体的形式出现,通过restful请求与Elasticsearch进行交互。

准备数据

PUT zhifou/doc/1

{

"name":"顾老二",

"age":30,

"from": "gu",

"desc": "皮肤黑、武器长、性格直",

"tags": ["黑", "长", "直"]

}

PUT zhifou/doc/2

{

"name":"大娘子",

"age":18,

"from":"sheng",

"desc":"肤白貌美,娇憨可爱",

"tags":["白", "富","美"]

}

PUT zhifou/doc/3

{

"name":"龙套偏房",

"age":22,

"from":"gu",

"desc":"mmp,没怎么看,不知道怎么形容",

"tags":["造数据", "真","难"]

}

PUT zhifou/doc/4

{

"name":"石头",

"age":29,

"from":"gu",

"desc":"粗中有细,狐假虎威",

"tags":["粗", "大","猛"]

}

PUT zhifou/doc/5

{

"name":"魏行首",

"age":25,

"from":"广云台",

"desc":"仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!",

"tags":["闭月","羞花"]

}

查询字符串

GET zhifou/doc/_search?q=from:gu

还是使用GET命令,通过_serarch查询,查询条件是什么呢?条件是from属性是gu家的人都有哪些。最后,别忘了_search和from属性中间的英文分隔符?。

结果如下:

{

"took" : 1,

"timed_out" : false,

"_shards" : {

"total" : 5,

"successful" : 5,

"skipped" : 0,

"failed" : 0

},

"hits" : {

"total" : 3,

"max_score" : 0.6931472,

"hits" : [

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "4",

"_score" : 0.6931472,

"_source" : {

"name" : "石头",

"age" : 29,

"from" : "gu",

"desc" : "粗中有细,狐假虎威",

"tags" : [

"粗",

"大",

"猛"

]

}

},

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "1",

"_score" : 0.2876821,

"_source" : {

"name" : "顾老二",

"age" : 30,

"from" : "gu",

"desc" : "皮肤黑、武器长、性格直",

"tags" : [

"黑",

"长",

"直"

]

}

},

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "3",

"_score" : 0.2876821,

"_source" : {

"name" : "龙套偏房",

"age" : 22,

"from" : "gu",

"desc" : "mmp,没怎么看,不知道怎么形容",

"tags" : [

"造数据",

"真",

"难"

]

}

}

]

}

}

我们来重点说下hits,hits是返回的结果集——所有from属性为gu的结果集。重点中的重点是_score得分,得分是什么呢?根据算法算出跟查询条件的匹配度,匹配度高得分就高。后面再说这个算法是怎么回事。

结构化查询

我们现在使用DSL方式,来完成刚才的查询,查看来自顾家的都有哪些人。

GET zhifou/doc/_search

{

"query": {

"match": {

"from": "gu"

}

}

}

上例,查询条件是一步步构建出来的,将查询条件添加到match中即可,而match则是查询所有from字段的值中含有gu的结果就会返回。

当然结果没啥变化:

{

"took" : 0,

"timed_out" : false,

"_shards" : {

"total" : 5,

"successful" : 5,

"skipped" : 0,

"failed" : 0

},

"hits" : {

"total" : 3,

"max_score" : 0.6931472,

"hits" : [

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "4",

"_score" : 0.6931472,

"_source" : {

"name" : "石头",

"age" : 29,

"from" : "gu",

"desc" : "粗中有细,狐假虎威",

"tags" : [

"粗",

"大",

"猛"

]

}

},

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "1",

"_score" : 0.2876821,

"_source" : {

"name" : "顾老二",

"age" : 30,

"from" : "gu",

"desc" : "皮肤黑、武器长、性格直",

"tags" : [

"黑",

"长",

"直"

]

}

},

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "3",

"_score" : 0.2876821,

"_source" : {

"name" : "龙套偏房",

"age" : 22,

"from" : "gu",

"desc" : "mmp,没怎么看,不知道怎么形容",

"tags" : [

"造数据",

"真",

"难"

]

}

}

]

}

}

es查询所欲_elasticsearch之查询的两种方式相关推荐

  1. SAP ABAP 根据物料工厂查询工作中心(ARBPL)的两种方式

    SAP ABAP 根据物料工厂查询工作中心(ARBPL)的两种方式 引言: 根据物料工厂查询工作中心的两种方式 关键字:SAP ABAP CR_WORKSTATION_READ ARBPL 工作中心 ...

  2. es查询所欲_Elasticsearch基本查询总结

    Elasticsearch是一个分布式文档存储.Elasticsearch不会将信息存储为列数据的行,而是存储已序列化为JSON文档的复杂数据结构.当集群中有多个Elasticsearch节点时,存储 ...

  3. 关于串口通讯查询与中断两种方式

    串口通讯有查询与中断两种方式 2011-09-13 13:31 我们知道串口通讯有查询与中断两种方式,但是对于两种方式的区别很多人并不是非常清楚,对于两者的实现到底有和不同呢?让我们简单的总结如下: ...

  4. Mybatis关联查询的两种方式

    首先要了解对象的三种关联方式 *数据库表的关联关系有三种,一对一,一对多,多对多 一对一   是通过在任意一方的主键,引入对方主键作为外键来实现的,就是说主键与外键为同一字段 一对多   是通过在&q ...

  5. 20210b高考成绩查询,高考成绩6月23日公布!两种方式可查分

    6月9日9时至11时30分,随着部分考生参加的高考考试科目蒙古语文乙的结束,2021年我区高考平稳.安全.顺利落幕.莘莘学子可以彻底放松心情,等待高考成绩的公布了.高考6月10日起网上阅卷,成绩将于6 ...

  6. mybatis一对多关联查询两种方式

    mybatis一对多关联查询两种方式 前提: 方式一: 方式二: 前提: 现在有两张表,学生表跟教师表,一个教师对应多个学生 教师表: CREATE TABLE `teacher` (`id` int ...

  7. springboot封装统一查询对象进行多条件查询案例(mybatis和mybatis-plus+反射两种版本)

    文章目录 mybatis版本: 通用查询接口 封装辅助查询类: 通用controller: 自定义注解 controller service mapper测试 mybatis-plus实现版本 ent ...

  8. redis优化查询的两种方式

    前言 一般来说,查询成为很多应用对外的性能瓶颈,其主要原因在于一旦并发量上来了,应用后台和数据库或者其他的存储服务的IO交互次数增多了,而服务器的线程资源开销是有限的,如何减少IO次数,这是优化要考虑 ...

  9. mybatis一对多的查询的两种方式

    需求简介: 有3张表,部门 ---->组织 ---->员工,一个部门包含多个组织,每个组织下有多名员工,现在需要根据部门ID查询某个部门下的所有组织,以及每个组织下的所有员工信息,返回的是 ...

最新文章

  1. linux ftrace原理
  2. Android之使用HTTP协议的Get/Post方式向服务器提交数据
  3. python tushare获取股票数据_Python 金融: TuShare API 获取股票数据 (1)
  4. MySql安装后在服务管理器里边找不到MySql服务项的解决办法(win10)
  5. VTK:循环收缩用法实战
  6. 企业级IM应该帮助员工提高绩效,避免无关的信息干扰
  7. Zookeeper:基于Zookeeper的分布式锁与领导选举
  8. prefix.pch文件的一些简单使用
  9. 关注微信公众号使其自动发送欢迎你关注消息
  10. 字段与属性 关于类的封装 c# 1229
  11. Swing basic
  12. 我的docker随笔8:docker容器相互访问
  13. 百年后你怎么在墓碑上留言?
  14. springboot连接redis错误 io.lettuce.core.RedisCommandTimeoutException:
  15. XenApp备份方法
  16. Linux系统高级编程系列教程
  17. uni-app(vue小程序)学习笔记
  18. html调用rpst 源码_前段播放 流媒体(RTMP,RTSP,HLS)
  19. linux硬盘对拷ghost教程,用dd实现linux硬盘备份 GHOST
  20. nRF52笔记(5)sniffer 抓包

热门文章

  1. 【七七八八】coursera python-basis certification
  2. 【手绘漫画】图解LeetCode之两两交换链表中的节点(LeetCode 24)
  3. Java实现文件下载
  4. 硬件microbit基础
  5. 前端如何实现黑夜模式
  6. 网页设计各种颜色搭配 并且哪几种颜色可以做成哪种风格
  7. RDSDRDSPolarDBPolarDB-X的区别
  8. Python进行数据分析探索
  9. Go语言Gin框架源码分析
  10. 现有一列表 ls = [‘the lord of the rings’,‘anaconda’,‘legally blonde’,‘gone with the wind’]