文档章节

elasticsearch dsl 常用过滤和查询语句

sanshao
 sanshao
发布于 2017/04/09 03:23
字数 942
阅读 37
收藏 0
点赞 0
评论 0

过滤语句为 从所有数据中查找一个结果集,查询语句则是标示的是查找一个精确的结果集合信息;

查询语句会询问每个文档的字段值与特定值的匹配程度如何

一条过滤语句会询问每个文档的字段值是否包含着特定值:

一条查询语句会计算每个文档与查询语句的相关性,会给出一个相关性评分 _score ,并且 按照相关性对匹配到的文档进行

排序。 这种评分方式非常适用于一个没有完全配置结果的全文本搜索

注:红色部分没有明白什么意思,如果有知道的烦请给予帮助,谢谢。。。。

1、索引中的数据为:

curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty'
{
  "took" : 3,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "dsltest",
        "_type" : "dsltesttype",
        "_id" : "2",
        "_score" : 0.2876821,
        "_source" : {
          "age" : 30,
          "date" : "2017-09-01",
          "public" : true,
          "tag" : [
            "full_text"
          ],
          "title" : "how to make second"
        }
      },
      {
        "_index" : "dsltest",
        "_type" : "dsltesttype",
        "_id" : "1",
        "_score" : 0.2876821,
        "_source" : {
          "age" : 26,
          "date" : "2014-09-01",
          "public" : true,
          "tag" : [
            "full_text",
            "nosql"
          ],
          "title" : "how to make millions"
        }
      }
    ]
  }
}

过滤语句:

term 过滤的是单个字段,用的是对象的方式,如果多个字段会报 [term] query does not support array of values term为过滤语句,所以不能添加match匹配信息

语法:
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"term":{"age":26}}}'

terms 过滤的是多个字段,用的是数组的方式;如果用对象的方式则会报错

terms中数组中的多个字段 标示的是 或者(OR)的关系

curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"terms":{"title":["make"]}}}'

range 查找范围内的数据:包括 gt大于  gte 大于等于  lt小于 lte小于等于

查找 年龄大于等于30的数据
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"range":{"age":{"gte":30}}}}'

exists 查找包含 某一个字段的数据 

获取包含title字段的数据
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"exists":{"field":"title"}}}'

如果存在多个过滤条件则通过 bool进行处理

must :: 多个查询条件的完全匹配,相当于 and 。

must_not :: 多个查询条件的相反匹配,相当于 not 。

should :: 至少有一个查询条件匹配, 相当于 or 。

多个过滤条件使用的方式为:

表示的是:过滤title中包含 make 同时age大于等于 27的数据
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"bool":{"must":{"term":{"title":"make"}},"must":{"range":{"age":{"gte":27}}}}}}'

查询语句:

match_all 查询所有的数据

curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"match_all":{}}}'
类似于:
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty'

match 查询匹配对应的词 对title进行分词查询结果

curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"match":{"title":"make"}}}'

multi_match 多字段匹配:查找 字段title中为make的数据,其中fields中的字段不一定存在

curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"multi_match":{"query":"make","fields":["title"]}}}'

如果同时存在多个同样也是用的 bool 查询bool和过滤bool相同 查询条件的使用方式为:

查询语句中 title中包含 make和second 或者 age包含26的数据
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query":{"bool":{"must":[{"match":{"title":"make"}},{"match":{"title":"second"}}],"should":{"match":{"age":26}}}}}'

同时包含 过滤 条件 和查询条件的语句方式为:[查询的为:title为make 同时 age 大于等于26,同时title为make过滤]

当前版本 5.2.2已经没有啦 filtered过滤字段,更改为bool 如果对查询和过滤合并处理的方式为
curl -i -XGET 'http://localhost:9200/dsltest/dsltesttype/_search?pretty' -d '{"query": {"bool": {"must":{"match":{"title":"make"}},"filter": {"bool": {"must": [{"term": {"title": "make"}}, {"range": {"age": {"gte": 26}}}]}}}}}'

 

 

 

© 著作权归作者所有

共有 人打赏支持
sanshao
粉丝 1
博文 23
码字总数 8671
作品 0
上海
后端工程师
Elasticsearch如何实现 SQL语句中 Group By 和 Limit 的功能

有 SQL 背景的同学在学习 Elasticsearch 时,面对一个查询需求,不由自主地会先思考如何用 SQL 来实现,然后再去想 Elasticsearch 的 Query DSL 如何实现。那么本篇就给大家讲一条常见的 SQ...

rockybean
05/21
0
0
spring-data-elasticsearch 实战案例详解(四)

本文提纲 一、搜索实战场景需求 二、运行 spring-data-elasticsearch-query 工程 三、spring-data-elasticsearch-query 工程代码详解 一、搜索实战场景需求 搜索的场景会很多,常用的搜索场景...

夜黑人模糊灬
05/13
0
0
spring-data-elasticsearch 基本案例详解(三)

『 风云说:能分享自己职位的知识的领导是个好领导。 』 运行环境:JDK 7 或 8,Maven 3.0+ 技术栈:SpringBoot 1.5+, Spring Data Elasticsearch 1.5+ ,ElasticSearch 2.3.2 本文提纲 一、...

夜黑人模糊灬
05/13
0
0
使用logstash+elasticsearch+kibana快速搭建日志平台

日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接口的调用次数、执行时间...

eddy_linux
2015/11/13
0
0
Elasticsearch入门实践

一. 系统环境 操作系统:CentOS release 6.8 (Final) ES版本:6.1.1 二. 安装 先确认安装了Java运行时环境: 解压ES压缩包: 三. 启动 1. 启动ES单节点 当然,对于在后台以守护进程模式运行的...

哲别0
06/06
0
0
bboss elasticsearch v5.0.6.0 发布

bboss elasticsearch v5.0.6.0 发布 bboss elasticsearch是一款高性能的elasticsearch orm java客户端框架,具备以下主要特性: 简单易用:基于xml配置和管理dsl,在dsl脚本中可以使用变量、...

bboss
04/20
0
0
小白都会超详细--ELK日志管理平台搭建教程

目录 一、介绍 二、安装JDK 三、安装Elasticsearch 四、安装Logstash 五、安装Kibana 六、Kibana简单使用 系统环境:CentOS Linux release 7.4.1708 (Core) 当前问题状况 开发人员不能登录线...

渣渣辉
07/15
0
0
如何优化100s的Elasticsearch 查询到1s以内

在SQL的世界里, 查询优化是相当成熟并且是可以理解的, 另外一方面, 分布式数据库系统是新出现的, 并且不太成熟. 理解查询是如何工作的将是一件非常重要的事情. Elstaticsearch的查询有时候将...

leon_lu
2017/10/31
0
0
初探 ELK - 每天5分钟玩转 Docker 容器技术(89)

在开源的日志管理方案中,最出名的莫过于 ELK 了。ELK 是三个软件的合称:Elasticsearch、Logstash、Kibana。 Elasticsearch 一个近乎实时查询的全文搜索引擎。Elasticsearch 的设计目标就是...

CloudMAN
2017/11/03
0
0
当ES赶超Redis,这份ES进修攻略不容错过!

从4月DB-Engines最新发布的全球数据库排名中,我们赫然发现ElasticSearch逆袭超越了Redis,从原先的第9名上升至第8名,而Redis则落后一名,排在了其后。 事实上,这场逆袭并不算太让人意外。...

DBAplus社群
04/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Laravel5.5 MySQL配置、读写分离及操作

Laravel 让连接不同数据库以及对数据库进行增删改查操作: 参考:http://laravelacademy.org/post/854.html 配置读写分离 应用的数据库配置位于 config/database.php(但是数据库用户及密码等...

MichaelShu
6分钟前
0
0
Linux 查看用户

存储帐号的文件:/etc/passwd 存储密码的文件:/etc/shadow 查看当前系统所有用户 grep bash /etc/passwd root修改普通用户的密码 sudo passwd user_name 然后连续两次输入新的用户密码即可...

yeahlife
13分钟前
0
0
Webpack使用nodemon实时打包编译

业务场景: 1.编写一个npm组件包并且link到了项目文件中 2.需要不断的修改并run build编译npm包并且在项目run dev 查看效果 3.问题: 每次改完npm包都要手动run build编译十分的麻烦且低效,可不...

JamesView
23分钟前
0
0
电脑炸了,浪费我好几天时间,还是简要记下来吧

我的小本本一直在兢兢业业的干活,然而前几天说炸就炸了...... 爆炸现场: 软件: windows10 pro + EIS11+ 360卫士 BIOS:N1DET98W 2.24 硬件: Xeon E3 1505-V5 nv-M3000M thinkpadP70:20E...

Oh_really
28分钟前
0
0
Git之branch和checkout

1.branch是查看、创建、删除分支 #>git branch --helpNAME git-branch - List, create, or delete branchesSYNOPSIS git branch [--color[=<when>] | --no-color] [......

汉斯-冯-拉特
29分钟前
0
0
Mybatis拦截器之数据权限过滤与分页集成

需求场景 最近项目有个数据权限的业务需求,要求大致为每个单位只能查看本级单位及下属单位的数据,例如:一个集团军下属十二个旅,那么军级用户可以看到所有数据,而每个旅则只能看到本旅部...

佛系程序猿灬
39分钟前
9
0
SpringCloud 微服务 (十六) 服务追踪 Zipkin

问题 在服务中,有一个接口,该A接口中又调用了其他服务的B、C、D接口,出现一个请求耗时大的问题,这时候并不知道该B、C、D接口中哪个接口造成的耗时量,然后比如确定C服务接口出现的耗时量大,但...

___大侠
今天
0
0
Java面试基础篇——第八篇:抽象类与接口的区别

1.抽象类 抽象类:如果一个类中包含有抽象方法,或这个类使用abstract关键字修饰,则称这个类是抽象类。 抽象方法是什么呢?抽象方法就是指用abstract关键字修饰的方法。 需要注意的是:抽象...

developlee的潇洒人生
今天
2
0
jsoup 相关资料

1.jsoup 2.Jsoup概述 3.jsoup入门 4.jsoup Java HTML Parser 1.11.3 API

IT追寻者
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部