elasticsearch结构化查询过滤语句-----4

时间:2022-08-27 20:25:45

1、之前三节讲述的都是索引结构及内容填充的部分,既然添加了数据那我们的目的无非就是增产改查crudp,我先来讲讲查询-----结构化查询

elasticsearch结构化查询过滤语句-----4

  我们看上图截图两种方式:

  1)第一种,在索引index5类型school下面定义一个查询query(这就是内嵌查询的关键字),query内部嵌套一个match根据指定field也就是字段查找其内容包含的关键字hawal。

  2)第二种,在索引index5类型school下面定义一个查询query(这就是内嵌查询的关键字),query内部嵌套一个match_all,不指定任何字段任何条件,就相当于查询所有内容,相当于GET /index5/school/_search

 

2、复杂嵌套查询

  在关系型数据库中有很多条件判断,比如 等于=  不等于!=等等,在es中同样有相应解决方案:

  1)must  需要满足条件  ==或like

  2)must_not  不需要在满足条件内的 !=或 not like

  我们举例查询,在索引index5中查询满足条件name字段包含hawal的,id字段不是12开头或包含12的,写成sql大概是where name like '%hawal%' and id not like '%12%'

  es中是这么表达的,同样定义一个query查询嵌套块,里面定义一个bool(和query一样是es内嵌关键字)的嵌套,name字段must为hawal,id字段must_not为12的。

  elasticsearch结构化查询过滤语句-----4

3、term过滤

  注意哦,这里是精确匹配,大小写什么都很严格,我们查询/index5索引下,name值为hawal或Hawal的查询有两种结果,请看:

  elasticsearch结构化查询过滤语句-----4

elasticsearch结构化查询过滤语句-----4

  看上图,索引中name存的是"Hawal",我们用Hawal"精准"的去匹配匹配不到,用hawal去匹配反而匹配到了,这是为什么呢?因为索引这行数据的时候分析其默认帮我们全转换成了小写,所以大写H开头的Hawal搜索不到,这,不知道是我理解有误还是es这么做有其他原理?

    

4、terms过滤(多值匹配)

  elasticsearch结构化查询过滤语句-----4

5、range过滤

elasticsearch结构化查询过滤语句-----4

  上图查询索引index5下subject下id大于或等于1002的所有内容

  范围操作符包含:

        elasticsearch结构化查询过滤语句-----4

6、exists和missing过滤

  exists 和 missing 过滤可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的 IS_NULL 条件

  我们举个例子,查找索引index5下name字段不为空的内容

  elasticsearch结构化查询过滤语句-----4

  其实就是指定field(字段)去查name字段不为空的内容,missing就不举例了。

 

7、bool过滤

  见本篇第二小节,must,must_not,should

 

8、match_all语句

  GET /index5/_search
  {
    "query": {
      "match_all": {}
      }
  }

  其实就相当于GET /index5/_search

9、带过滤的查询语句

  如我现在精确匹配索引index5下name包含mit的内容

  GET /index5/_search
  {
    "query":{
    "term":{
      "subject.subject-name":"computer"
       }
    }
  }

  但是我同时向加入另一条过滤,在匹配subject.subject-name包含"computer"的同时还需要过滤subject.students大于1002的内容

  elasticsearch结构化查询过滤语句-----4

  

  我们看上图执行结果,索引/index5中subject.subject-name字段匹配computer的内容,然后过滤掉里面subject.students大于1002的内容,这里所有结果的students都小于1002,所以均返回了。

  那我们可以很好的理解query和filter的区别,query是现实匹配的,filter是在已匹配的内容里面过滤掉满足fiter条件的内容。

  请注意------es 5.x往后的版本去掉了filters语法,统一采用bool嵌套filter的语法。

10、验证查询

  有时候我们写了一个查询语句,但是可能由于语法错误或指定查询的字段不存在报了一堆错误,但是提示信息并不明显,这时es给我们提供了一个校验请求语法的功能,其实就是在执行前先会帮忙校验一下语法是否正确,并会给出相关提示信息:

  比如我要查询索引index5下所有name字段中包含“tinghua”的内容,但这是我把内嵌查询query字段拼成了qery,这时就该提示Unknown key for a START_OBJECT in [qery]。

  

elasticsearch结构化查询过滤语句-----4

  其实,我们可以先对查询体做校验,在请求体后加上/_validate/query即可:

  elasticsearch结构化查询过滤语句-----4

 

  可以看到右边的校验结果为false,想看到更具体的结果,加上?explain即可

  elasticsearch结构化查询过滤语句-----4

 

  如果校验成功,我们会看到es的索引结果,如你用的分析器将你需要搜索的内容拆分成几个字段,在哪些索引中查找到内容都能看到:

  elasticsearch结构化查询过滤语句-----4

 

elasticsearch结构化查询过滤语句-----4的更多相关文章

  1. ElasticSearch 常用的查询过滤语句

    query 和  filter 的区别请看: http://www.cnblogs.com/ghj1976/p/5292740.html Filter DSL term 过滤 term主要用于精确匹配 ...

  2. [转] ElasticSearch 常用的查询过滤语句

    备忘remark https://www.cnblogs.com/ghj1976/p/5293250.html query 和  filter 的区别请看: http://www.cnblogs.co ...

  3. ElasticSearch 基本概念 and 索引操作 and 文档操作 and 批量操作 and 结构化查询 and 过滤查询

    基本概念 索引: 类似于MySQL的表.索引的结构为全文搜索作准备,不存储原始的数据. 索引可以做分布式.每一个索引有一个或者多个分片 shard.每一个分片可以有多个副本 replica. 文档: ...

  4. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  5. ElasticSearch(6)-结构化查询

    引用:ElasticSearch权威指南 一.请求体查询 请求体查询 简单查询语句(lite)是一种有效的命令行_adhoc_查询.但是,如果你想要善用搜索,你必须使用请求体查询(request bo ...

  6. ElasticSearch权威指南学习(结构化查询)

    请求体查询 简单查询语句(lite)是一种有效的命令行adhoc查询.但是,如果你想要善用搜索,你必须使用请求体查询(request body search)API. 空查询 我们以最简单的 sear ...

  7. SQL结构化查询语句

    SQL结构化查询语句 SQL定义了查询所有关系型数据库的规则. 1.通用语法 SQL语句可以单行或者多行书写,以分号结尾 可以使用空格和缩进增强可读性 不区分大小写,但是关键字建议大写 3种注释 注释 ...

  8. Elasticsearch 结构化搜索、keyword、Term查询

    前言 Elasticsearch 中的结构化搜索,即面向数值.日期.时间.布尔等类型数据的搜索,这些数据类型格式精确,通常使用基于词项的term精确匹配或者prefix前缀匹配.本文还将新版本的&qu ...

  9. ElasticSearch 结构化搜索

    1.介绍 结构化搜索(Structured search) 是指有关探询那些具有内在结构数据的过程.比如日期.时间和数字都是结构化的:它们有精确的格式,我们可以对这些格式进行逻辑操作. 比较常见的操作 ...

随机推荐

  1. socket Bio demo

    最近在做socket通信,最开始是基于Bio开发(其实开发的时候也不知道这种是基于BIO).但是问题来了,客户端发的报文,服务端接收会少,为了解决问题,只能恶补一下相关知识. 服务端: import ...

  2. Android开发各类常见错误解决方案

    本文属于个人平时项目开发过程遇到的一些问题,记录下来并总结解决方案,希望能帮到大家解决问题,有些问题的解决方案是在*上找到的,建议大家遇到问题多去上面找,基本上都能找到解决方案 ...

  3. Django和Flask对于URL尾斜杠(back slash)的处理

    最近在看Flask,其中提到了对于URL尾斜杠的处理.感觉算是一个需要注意的地方吧,就和Django的处理方式来进行一个简单的对比. 首先说下什么是尾斜杠. http://www.baidu.com/ ...

  4. Python多线程join的用法

    import threading, time def Myjoin(): print 'hello world!' time.sleep(1) for i in range(5): t=threadi ...

  5. .NET Framework 框架的一些简单介绍

    20世纪90年代以来出现的3种典型的组件技术: 1)OMC(对象组件模型)的CORBA2)Microsoft的COM/DCOM3)Sun公司的JavaBeans 在2002年,微软发布了.NET框架的 ...

  6. Error during installing HAXM, VT-X not working 在安装HAXM错误,开始不工作

    最佳答案 (Best Answer) Some antivirus options prevent Haxm installation. ie: Avast : settings (parametre ...

  7. 遍历Map集合的方法

    创建一个MAP的栗子: Map<String, Integer> tempMap = new HashMap<String, Integer>(); tempMap.put(& ...

  8. IIS 7 WAS服务不可用

    在 Windows Server 2008 上使用 %windir%\system32\inetsrv\appcmd.exe list wp 命令,得到如下错误: ERROR ( message:WA ...

  9. 兼容IE,chrome 等所有浏览器 回到顶部代码

    今天在博客园看到一片帖子回到顶部代码,索性就看了下,但是发现在非IE浏览器下可以运行,在IE浏览器下却运行不了. 故将其代码搬弄过来做了些许修改后,完美支持了IE下的运行. 主要实现功能代码文件: & ...

  10. poj 3259 Wormholes&lpar;最短路 Bellman&rpar;

    题目:http://poj.org/problem?id=3259 题意:一个famer有一些农场,这些农场里面有一些田地,田地里面有一些虫洞,田地和田地之间有路,虫洞有这样的性质: 时间倒流.问你这 ...