Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)
原文:Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
Elasticsearch建议我们尽量使用Request Body查询的方式,这种方式支持的语法更丰富。
常用语法
先来看一个简单的例子。这个例子会查询两个索引(movies和404_idx)的全部文档。理论上,如果404_idx索引不存在,Elasticsearch将返回错误。但是,由于ignore_unavailable参数的缘故,执行将忽略不可用的索引。
-
# ignore_unavailable=true,可以忽略尝试访问不存在的索引“404_idx”导致的报错
-
POST /movies,404_idx/_search?ignore_unavailable=true
-
{
-
"profile": true,
-
"query": {
-
"match_all": {}
-
}
-
}
1 from / size
分页
我们还可以使用 from / size
组合来实现分页。
-
POST /movies/_search
-
{
-
"from": 0,
-
"size": 20,
-
"query": {
-
"match_all": {}
-
}
-
}
2 sort
排序
使用sort
来实现排序。如果需要像sql语句一样对多个字段排序,可以在sort里面传入多个元素。
-
POST /movies/_search
-
{
-
"sort": [{"year": {"order": "desc"}},
-
{"id.keyword": {"order": "desc"}} ],
-
"from": 0,
-
"size": 20,
-
"query": {
-
"match_all": {}
-
}
-
}
3 _source 过滤
Elasticsearch查询的结果过多,会影响执行的效率。因此,我们可以通过_source过滤的方式来减少查询的字段。
如下查询只显示 title属性
-
POST /movies/_search
-
{
-
"sort": [{"year": {"order": "desc"}},
-
{"id.keyword": {"order": "desc"}} ],
-
"from": 0,
-
"size": 20,
-
"_source": ["title"],
-
"query": {
-
"match_all": {}
-
}
-
}
4 脚本字段
Elasticsearch还支持painless脚本字段,这种机制可以通过脚本的方式做一些简单的操作,比如:字符串拼接。在订单场景,订单有不同的汇率信息,通过脚本计算,我们可以针对计算的结果排序。
-
POST /movies/_search
-
{
-
"sort": [{"year": {"order": "desc"}},
-
{"id.keyword": {"order": "desc"}} ],
-
"from": 0,
-
"size": 20,
-
"query": {
-
"match_all": {}
-
}
-
, "script_fields": {
-
"new_title": {
-
"script": {
-
"lang": "painless",
-
"source": "doc['year'].value+'hello'"
-
}
-
}
-
}
-
}
5 match 表达式语句
1) query match中,查询的内容默认是OR的方式。如下所示:
-
POST /movies/_search
-
{
-
"query": {
-
"match": {
-
"title": "last christmas"
-
}
-
}
-
}
2) 如果要使用AND的方式,可通过指定operator为and来实现。
-
POST /movies/_search
-
{
-
"query": {
-
"match": {
-
"title": {
-
"query": "last christmas",
-
"operator": "and"
-
}
-
-
}
-
}
6 短语查询
使用短语查询的方式。即:phrase query
。默认短语中间不能有间隔,但是可使用slop=1来表示中间可以间隔一个term(单词)
-
POST /movies/_search
-
{
-
"query": {
-
"match_phrase": {
-
"title":{
-
"query": "one love",
-
"slop": 1
-
}
-
}
-
}
-
}
二 Query string && Simple query string
1 Elasticsearch还支持query string和simple query string。先来看看query string,这种方式支持分组和多字段。
首先插入两条测试数据
-
PUT /users/_doc/1
-
{
-
"name":"Ruan Yiming",
-
"about":"java, golang, node, swift, elasticsearch"
-
}
-
-
PUT /users/_doc/2
-
{
-
"name":"Li Yiming",
-
"about":"Hadoop"
-
}
测试:
-
POST /users/_search
-
{
-
"query": {
-
"query_string": {
-
"default_field": "name",
-
"query": "Ruan AND Yiming"
-
}
-
}
-
}
-
-
# 多字段 使用 fields
-
POST /users/_search
-
{
-
"query": {
-
"query_string": {
-
"fields": ["name","about"],
-
"query": "(Ruan AND Yiming) OR (Java AND Elasticsearch)"
-
}
-
}
-
}
-
simple query string,类似于query string,但是有以下不同:
- 会忽略错误的语法,且只支持部分查询语法
- 不支持
AND
、OR
、NOT
,如果出现这些term,将被当做字符串处理 - term之间默认的关系是
OR
,可指定default_operator - 支持部分逻辑,
+
代替AND
,|
代替OR
,-
代替NOT
-
POST users/_search
-
{
-
"query": {
-
"simple_query_string": {
-
"query": "Zhang Fubing",
-
"fields": ["name"],
-
"default_operator": "AND"
-
}
-
}
-
}
Elasticsearch7.X 入门学习第四课笔记---- Search API之(Request Body Search 和DSL简介)的更多相关文章
- Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板
原文:Elasticsearch7.X 入门学习第八课笔记-----索引模板和动态模板 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接: ...
- Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer
原文:Elasticsearch7.X 入门学习第七课笔记-----Mapping多字段与自定义Analyzer 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处 ...
- Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍
原文:Elasticsearch7.X 入门学习第五课笔记---- - Mapping设定介绍 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本 ...
- Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search)
原文:Elasticsearch7.X 入门学习第三课笔记----search api学习(URI Search) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...
- Elasticsearch7.X 入门学习第一课笔记----基本概念
原文:Elasticsearch7.X 入门学习第一课笔记----基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...
- Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation
原文:Elasticsearch7.X 入门学习第九课笔记-----聚合分析Aggregation 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. ...
- Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD
原文:Elasticsearch7.X 入门学习第二课笔记----基本api操作和CRUD 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链 ...
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...
- 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) 二. ...
随机推荐
- 对postcss以及less和sass的研究
1.postcss PostCSS 的主要功能只有两个:第一个就是前面提到的把 CSS 解析成 JavaScript 可以操作的 抽象语法树结构(Abstract Syntax Tree,AST),第 ...
- 使用vue 3.0 初始化vue脚手架
vue-cli3.0安装 如果你事先已经全局安装了旧版本的vue-cli(1.x 或 2.x),你需要先卸载它: npm uninstall vue-cli -g 安装 npm install -g ...
- Headless Windows
Google Chrome 79.0.3945.79 (正式版本) (64 位) (cohort: 79_Win_79) .\chrome --headless --user-data-dir=tmp ...
- WEB上传一个文件夹
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...
- getchar、getch、getche 与 gets()
一.getchar.getch.getche 1.getchar() getchar()从输入缓冲区读入一个字符,并返回这个字符的ASCII码(即函数返回值为int型),出错返回-1(EOF):如果用 ...
- windows10 ubuntu子系统 WSL文件位置
windows10 的linux子系统(windows subsystem for linux)WSL 文件位置 以我的系统为例,WSL的root目录对应windows的: C:\Users\xiao ...
- 报错信息:ORA-00979:不是GROUP BY表达式
如图所示 参考:https://blog.csdn.net/linan0930/article/details/16508025 解决方案:即select 列表项中不存在的列可以出现在group by ...
- Amaze ui tree 刷新数据
最近在做代码生成器,界面用的是Amaze ui ,但是在用tree的时候发现数据绑定不会自动更新,去百度.谷歌查也没有查到,没办法只能自己做一个demo 在这贴上效果图 demo 下载地址https: ...
- mktime夏令时处理
https://www.cnblogs.com/dongzhiquan/archive/2011/11/05/2237075.html 我们的最终目的是把字符串格式的时间转换为内部使用的“日历时间”, ...
- Vue知识整理7:vue中函数的应用
在vue中使用函数对字符串做相应的处理: split:分割字符,将每个字符分割为一个数组值: reverse:将字符进行逆序排序: join:将字符连接: 最终输出结果.