原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

Elasticsearch建议我们尽量使用Request Body查询的方式,这种方式支持的语法更丰富。

常用语法

先来看一个简单的例子。这个例子会查询两个索引(movies和404_idx)的全部文档。理论上,如果404_idx索引不存在,Elasticsearch将返回错误。但是,由于ignore_unavailable参数的缘故,执行将忽略不可用的索引。


  1. # ignore_unavailable=true,可以忽略尝试访问不存在的索引“404_idx”导致的报错
  2. POST /movies,404_idx/_search?ignore_unavailable=true
  3. {
  4. "profile": true,
  5. "query": {
  6. "match_all": {}
  7. }
  8. }

1 from / size分页

我们还可以使用 from / size 组合来实现分页。


  1. POST /movies/_search
  2. {
  3. "from": 0,
  4. "size": 20,
  5. "query": {
  6. "match_all": {}
  7. }
  8. }

2 sort排序

使用sort来实现排序。如果需要像sql语句一样对多个字段排序,可以在sort里面传入多个元素。


  1. POST /movies/_search
  2. {
  3. "sort": [{"year": {"order": "desc"}},
  4. {"id.keyword": {"order": "desc"}} ],
  5. "from": 0,
  6. "size": 20,
  7. "query": {
  8. "match_all": {}
  9. }
  10. }

3 _source 过滤

Elasticsearch查询的结果过多,会影响执行的效率。因此,我们可以通过_source过滤的方式来减少查询的字段。

如下查询只显示 title属性


  1. POST /movies/_search
  2. {
  3. "sort": [{"year": {"order": "desc"}},
  4. {"id.keyword": {"order": "desc"}} ],
  5. "from": 0,
  6. "size": 20,
  7. "_source": ["title"],
  8. "query": {
  9. "match_all": {}
  10. }
  11. }

4 脚本字段

Elasticsearch还支持painless脚本字段,这种机制可以通过脚本的方式做一些简单的操作,比如:字符串拼接。在订单场景,订单有不同的汇率信息,通过脚本计算,我们可以针对计算的结果排序。


  1. POST /movies/_search
  2. {
  3. "sort": [{"year": {"order": "desc"}},
  4. {"id.keyword": {"order": "desc"}} ],
  5. "from": 0,
  6. "size": 20,
  7. "query": {
  8. "match_all": {}
  9. }
  10. , "script_fields": {
  11. "new_title": {
  12. "script": {
  13. "lang": "painless",
  14. "source": "doc['year'].value+'hello'"
  15. }
  16. }
  17. }
  18. }

5 match 表达式语句

1) query match中,查询的内容默认是OR的方式。如下所示:


  1. POST /movies/_search
  2. {
  3. "query": {
  4. "match": {
  5. "title": "last christmas"
  6. }
  7. }
  8. }

2) 如果要使用AND的方式,可通过指定operator为and来实现。


  1. POST /movies/_search
  2. {
  3. "query": {
  4. "match": {
  5. "title": {
  6. "query": "last christmas",
  7. "operator": "and"
  8. }
  9. }
  10. }

6 短语查询

使用短语查询的方式。即:phrase query。默认短语中间不能有间隔,但是可使用slop=1来表示中间可以间隔一个term(单词)


  1. POST /movies/_search
  2. {
  3. "query": {
  4. "match_phrase": {
  5. "title":{
  6. "query": "one love",
  7. "slop": 1
  8. }
  9. }
  10. }
  11. }

二 Query string && Simple query string

1 Elasticsearch还支持query string和simple query string。先来看看query string,这种方式支持分组和多字段。

首先插入两条测试数据


  1. PUT /users/_doc/1
  2. {
  3. "name":"Ruan Yiming",
  4. "about":"java, golang, node, swift, elasticsearch"
  5. }
  6. PUT /users/_doc/2
  7. {
  8. "name":"Li Yiming",
  9. "about":"Hadoop"
  10. }

测试:


  1. POST /users/_search
  2. {
  3. "query": {
  4. "query_string": {
  5. "default_field": "name",
  6. "query": "Ruan AND Yiming"
  7. }
  8. }
  9. }
  10. # 多字段 使用 fields
  11. POST /users/_search
  12. {
  13. "query": {
  14. "query_string": {
  15. "fields": ["name","about"],
  16. "query": "(Ruan AND Yiming) OR (Java AND Elasticsearch)"
  17. }
  18. }
  19. }

simple query string,类似于query string,但是有以下不同:

  1. 会忽略错误的语法,且只支持部分查询语法
  2. 不支持ANDORNOT,如果出现这些term,将被当做字符串处理
  3. term之间默认的关系是OR,可指定default_operator
  4. 支持部分逻辑,+代替AND|代替OR-代替NOT

  1. POST users/_search
  2. {
  3. "query": {
  4. "simple_query_string": {
  5. "query": "Zhang Fubing",
  6. "fields": ["name"],
  7. "default_operator": "AND"
  8. }
  9. }
  10. }

Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)的更多相关文章

  1. Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板

    原文:Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...

  2. Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer

    原文:Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处 ...

  3. Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍

    原文:Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本 ...

  4. Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)

    原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...

  5. Elasticsearch7.X 入门学习第一课笔记----基本概念

    原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  6. Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation

    原文:Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...

  7. Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD

    原文:Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链 ...

  8. 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解   建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...

  9. Java Web入门学习(四)Eclipse与Maven、Tomcat整合配置

    Java Web学习(四)Eclipse与Maven整合配置 一.准备工作 1.Tomcat 8.5.15 2.Maven3.5 3.Eclipse Neon.3 Release (4.6.3) 二. ...

随机推荐

  1. C/C++输出格式控制符

    C/C++格式控制符 一.类型 类型字符用以表示输出数据的类型,其格式符和意义如下表所示: 格式字符 意义 d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀 ...

  2. spring boot不要放在tomcat下启动,因为自身就带了集成tomcat

    spring boot不要放在tomcat下启动,因为自身就带了集成tomcat

  3. java上传大文件(局域网环境)

    文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...

  4. Java——常用类(String)

    [常用类]   <1>字符串相关类(String.StringBuffer)   <2>基本数据类型包装类   <3>Math类   <4>File类 ...

  5. Golang在京东列表页实践总结

    Golang在京东列表页实践总结 作者:张洪涛 10余年软件开发和设计经验,曾就职于搜狐.搜狗.前matrixjoy公司联合创始人.甘普科技CTO. 目前线上状态 基于搜索实现: 全量数据,搜索结果不 ...

  6. 搭建 .Net RabbitMQ 开发环境

    开发环境,window 10 64位,VS2017,系统账号需要用administrator. 1 先需要安装erlang语言开发包,一路默认安装就是了,地址:http://www.erlang.or ...

  7. Linq in not in\like not like

    别人的博客 http://blog.163.com/lesheng@126/blog/static/357364652010102111051668/ using System.Data.Linq.S ...

  8. va_list原理及用法

    最后更新:2017-02-22 这是一篇很早很早的博客文章,虽然很基础,但是毕竟曾经历程,因此也保存下来 1. 概念 va_list 是在C语言中定义的宏,指在解决 变参问题是指参数的个数不定,可以是 ...

  9. CRTMPServer 在CentOS 64-bit下的编译(转)

    CRTMPServer 在CentOS 64-bit下的编译 http://blog.csdn.net/qiuchangyong/article/details/52848942 ========== ...

  10. MySQL5.6transportable tablespace

    https://blog.csdn.net/xiaoyi23000/article/details/53150776