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) 二. ...
随机推荐
- A1031
画图,用二维数组作为画布 #include<cstdio> #include<string.h> int main(){ ],u[][]; scanf("%s&quo ...
- A1042
洗牌,共洗k次,每次将将原先的牌洗进输入好的位置. 步骤: 1 设置次数k,输入位置数列next[55],填充初始牌序start[55]: 2 end[next[i]]=start[i]把新的牌序赋值 ...
- Android App学习计划
模块化 Json Gson Fastjson Jackson EventBus GreenDao Flutter ButterKnife Dagger okhttp Rxjava/Rxandroid ...
- python-登录保持
cookies.Session import requests url1="http://127.0.0.1:5000/login" url2="http://127. ...
- jAVA基础 提高文件复制性能之多线程复制文件
利用IO流中的随机访问文件 RandomAccessFile 和文件通道 FileChanne 复制文件可大大提高文件的读写效率,在此基础上利用多线程复制文件使其性能更优.因线程的个数可根据文件的大小 ...
- docker安装禅道
一.下载地址 禅道开源版: http://dl.cnezsoft.com/zentao/docker/docker_zentao.zip 数据库用户名: root,默认密码: 123456.运行时 ...
- Numpy基础(数组创建,切片,通用函数)
1.创建ndarray 数组的创建函数: array:将输入的数据(列表,元组,数组,或者其他序列类型)转换为ndarray.要么推断出dtype,要么显式给定dtype asarray:将输入转换为 ...
- windows 下的定时任务 (原)
linux 下的定时任务是crontab 以前都是linux的定时任务,这次在windows做了定时任务,简单记录一下(win8 跟 win10为例) windows 2008下的定时任务配置: 控制 ...
- vue 实现,子组件向父组件 传递数据
首先理清组件之间的关系 组件与组件之间,还存在着不同的关系.父子关系与兄弟关系(不是父子的都暂称为兄弟吧). 父子组件 父子关系即是组件 A 在它的模板中使用了组件 B,那么组件 A 就是父组件,组件 ...
- 移动端轮播完整版css3加原生写法
<!doctype html><html><head> <meta charset="UTF-8"> <meta name=& ...