原文: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. v-if 和 v-show

    关于条件渲染 所谓条件渲染,就是根据不同的条件,使用不同的模板来生成 html. 在 Vue.js 中,使用 v-if 和 v-show 指令来控制条件渲染. 区别 v-show 会在app初始化的时 ...

  2. ASP.net 能写一个上传整个文件夹的东东(msdn)

    IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...

  3. 【BZOJ1521】Est(单调队列优化DP)

    题意:From https://www.cnblogs.com/CXCXCXC/p/4725249.html 思路:本身就两维状态了,把问题关键s[i][j]写成二维比一维好写多了 #include& ...

  4. flex兼容问题

    display:flex作为C3的新属性,还是有的浏览器不支持的,那下面我们就来说一下他的兼容写法 .box{ display: -webkit-box; /* 老版本语法: Safari, iOS, ...

  5. Android Bluetooth 文件接收路径修改方法

    修改文件: packages/apps/Bluetooth/src/com/android/bluetooth/opp/BluetoothOppReceiveFileInfo.java 相关代码片段: ...

  6. 修改mac默认python版本 为python3

    mac一般自带python2.7 可以修改 ~/.bash_profile (具体的path取决于你的python3安装路径): vi ~/.bash_profile # 添加这一行 alias py ...

  7. iOS即时通讯之CocoaAsyncSocket源码解析二

    原文 前言 本文承接上文:iOS即时通讯之CocoaAsyncSocket源码解析一 上文我们提到了GCDAsyncSocket的初始化,以及最终connect之前的准备工作,包括一些错误检查:本机地 ...

  8. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_07 Collections工具类_1_Collections集合工具类的方法

    这是一个个的添加的方式 参数是个可变的元素.可以传递任意多的元素 shuffle打乱集合元素顺序

  9. Jmeter之用户参数和用户定义的变量

    在调试脚本的时候,可以使用前置处理器中的用户参数组件进行数据的提供,在该数据中可以使用固定值也可以使用变量值. 如果是固定不变的一些配置项,不需要多个值的时候,也可以使用用户已定义的变量组件. 一.界 ...

  10. hbase的TTL机制清除opentsdb的超时数据

    我们发现用opentsdb向hbase写数据之后,磁盘占用率飙升得很快,我们存的业务数据只用保存一个月的即可,了解hbase的TTL机制可以清除相关表.相关行的超时数据,之前在数据备份时,我介绍了,o ...