原文: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. 对postcss以及less和sass的研究

    1.postcss PostCSS 的主要功能只有两个:第一个就是前面提到的把 CSS 解析成 JavaScript 可以操作的 抽象语法树结构(Abstract Syntax Tree,AST),第 ...

  2. 使用vue 3.0 初始化vue脚手架

    vue-cli3.0安装 如果你事先已经全局安装了旧版本的vue-cli(1.x 或 2.x),你需要先卸载它: npm uninstall vue-cli -g 安装 npm install -g ...

  3. Headless Windows

    Google Chrome 79.0.3945.79 (正式版本) (64 位) (cohort: 79_Win_79) .\chrome --headless --user-data-dir=tmp ...

  4. WEB上传一个文件夹

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  5. getchar、getch、getche 与 gets()

    一.getchar.getch.getche 1.getchar() getchar()从输入缓冲区读入一个字符,并返回这个字符的ASCII码(即函数返回值为int型),出错返回-1(EOF):如果用 ...

  6. windows10 ubuntu子系统 WSL文件位置

    windows10 的linux子系统(windows subsystem for linux)WSL 文件位置 以我的系统为例,WSL的root目录对应windows的: C:\Users\xiao ...

  7. 报错信息:ORA-00979:不是GROUP BY表达式

    如图所示 参考:https://blog.csdn.net/linan0930/article/details/16508025 解决方案:即select 列表项中不存在的列可以出现在group by ...

  8. Amaze ui tree 刷新数据

    最近在做代码生成器,界面用的是Amaze ui ,但是在用tree的时候发现数据绑定不会自动更新,去百度.谷歌查也没有查到,没办法只能自己做一个demo 在这贴上效果图 demo 下载地址https: ...

  9. mktime夏令时处理

    https://www.cnblogs.com/dongzhiquan/archive/2011/11/05/2237075.html 我们的最终目的是把字符串格式的时间转换为内部使用的“日历时间”, ...

  10. Vue知识整理7:vue中函数的应用

    在vue中使用函数对字符串做相应的处理: split:分割字符,将每个字符分割为一个数组值: reverse:将字符进行逆序排序: join:将字符连接: 最终输出结果.