ElasticSearch常用查询(一)

news/2024/11/17 14:21:23/文章来源:https://www.cnblogs.com/duanxiaobiao/p/18550363

一、前言

​ 以前做的某个项目中包含了大量的查询聚合,现在有时间整理一番,记录一下ES常用查询聚合语法。

二、常用查询语法

2.1 match 查询

​ match查询,模糊匹配(自动分词),在进行分词的模糊匹配时,要求该字段的类型是text..keyword类型。

GET article/_search
{"query": {"match": {"content": "描述天气状况"}}
}------------------------------------------------------
// 可以使用下面测试数据查看效果.
{"mappings":{"doc":{"properties":{"content":{"type":"text","fields":{"keyword":{"type":"keyword","ignore_above":256}}},"view_count":{"type":"long"},"article_name":{"type":"keyword"}}}}}POST article/doc/
{"article_name":"文章一","content":"这是一篇测试文章,想要测试一下match查询语法,你知道吗?","view_count":27
}POST article/doc/
{"article_name":"文章二","content":"这是一篇天气的相关描述,你知道当前的天气状况吗?","view_count":2
}

match和term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程,match查询相当于模糊匹配,只包含其中一部分关键词就行

2.2 match_all查询

GET article/_search
{"query": {"match_all": {}}
}

2.3 multi_match查询

GET article/_search
{"query": {"multi_match": {"query": "知道","fields": ["content"]}}
}GET article/_search
{"query": {"multi_match": {"query": "文章","fields": ["content"]}}
}

2.4 term查询

term查询相当于sql里面的 a = 'A'; 并且字段的类型不能为分词类型.

GET article/_search
{"query": {"term": {"article_name": {"value": "文章二"}}}
}

2.4 terms查询

​ terms查询相当于sql中的in 语句.

GET article/_search
{"query": {"terms": {"article_name": ["文章一","文章二"]}}
}

2.5 range查询

gte 表示 大于等于gt表示大于;

lte表示小于等于lt表示小于

GET article/_search
{"query": {"range": {"view_count": {"gte": 10,"lte": 40}}}
}

2.7 exists查询

GET article1/_search
{"query": {"exists": {"field":"view_count"}}
}-------------------------------------------
再添加一条没有view_count的数据,用来测试
POST article1/doc/
{"article_name":"文章三","content":"这是一篇天气的相关描述,你知道当前的天气状况吗?"
}

2.8 wildcard模糊查询

​ 模糊查询时,需要在关键词前后添加*, 并且,搜索的这个字段如果是text..keyword 这种动态类型,在搜索时需要在搜索字段后添加.keyword

​ 如果搜索的这个字段的数据类型是keyword类型,则不需要添加.keyword,但是按照keyword类型存储长文本,可能会损耗性能。

-- content字段是text...keyword类型GET article/_search
{"query": {"wildcard": {"content.keyword": {"value": "*测试*"}}}
}

2.9 bool查询

bool查询,也就是多条件查询,可以将上述的简单查询条件组成不同的复杂多条件查询;其中bool需要搭配以下的查询:

(1)must查询:sql里的and关系

(2)must_not查询:和must相反

(3)should查询:sql里的or关系

(4)filter查询:也是and关系,只是说filter查询没有分数概念。

-- 查询出 article_name = "文章一" and view_count = 27 and article_name != "文章二"GET article/_search
{"query": {"bool": {"must": [{"term":{"article_name": "文章一"}},{"term":{"view_count": 27}}],"must_not": [{"term":{"article_name": "文章二"}}]}}
}-- 查询出文章名称为"文章一" 或者浏览量为2的数据     ---------------------
GET article/_search
{"query": {"bool": {"should": [{"term":{"article_name": "文章一"}},{"term":{"view_count": 2}}]}}
}-- 查询出文章名称为"文章一"并且浏览量为2的数据     -------------------------
GET article/_search
{"query": {"bool": {"filter": [{"term":{"article_name": "文章一"}},{"term":{"view_count": 2}}]}}
}

2.10 must查询

GET article/_search
{"query": {"bool": {"must": [{"term": {"article_name": {"value": "文章一"}}}]}}
}

2.11 must_not查询

GET article/_search
{"query": {"bool": {"must_not": [{"term": {"article_name": {"value": "文章一"}}}]}}
}

2.11 should查询

GET article/_search
{"query": {"bool": {"should": [{"term": {"article_name": {"value": "文章一"}}}]}}
}

2.13 filter查询

GET article/_search
{"query": {"bool": {"filter": [{"term": {"article_name": {"value": "文章二"}}},{"terms":{"view_count":[2,27]}}]}}
}

2.14 geo_distance地理位置圆形查询

查询方圆3000m范围内所有的用户(geo_distance)

GET user_address_info/_search
{"query": {"geo_distance": {"address_point": [114.067,22.55],"distance": 3000,"unit":"m","distance_type": "arc"}}
}-----------------使用下面测试索引查询-----------------------------------
PUT user_address_info/
{"mappings":{"doc":{"properties": {"address_point": {"type": "geo_point"},"name": {"type": "keyword"}}}}
}---- 插入一条数据
POST user_address_info/doc
{"name":"少年宫","address_point":[114.067406,22.553121]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/835319.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QObject,QMainWindpw,QWidget,QDialog介绍

QObject QObject 的角色和特点 在 Qt 框架中,QObject 是整个对象模型的核心基类,它为 Qt 对象树 和 信号-槽机制 提供了基础支持。很多 Qt 的类(包括 QWidget、QDialog、QMainWindow)都直接或间接继承自 QObject。 QObject 的核心功能对象树管理(Object Tree)QObject 提供…

2024-2025-1 20241329 《计算机基础与程序设计》第八周学习总结

作业信息 作业归属课程:https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP 作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08 作业目标:功能设计与面向对象设计;面向对象设计过程;面向对象语言三要素;汇编、编译、解释、执行 作业正文:https://www…

Alpha冲刺(4/14)——2024.11.15

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余时间施靖杰 完…

高三鲜花 #2

水发现放假之后其实连鲜花都是不想写的了。 所以这是钓鱼博。 也不能钓这么直接,还是需要写一点东西的。 应该是马上就距离高考还剩 200 天了。然后这里本来写了很多关于 whk 的文本,全删了,觉得有点无意义,毕竟这应该是一篇钓鱼博。 whk 真难。 突然发现我已经退役四个月了…

语文成绩

语文成绩(https://www.luogu.com.cn/record/189365158) 题目描述 语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗? 输入格式 第一行有两个整数 n,p,代表学生数与增加分数的次数。…

「LUCKY STUN穿透」使用Cloudflare的页面规则固定和隐藏网页端口

关于本教程 索引 │ ├─关于本教程 │ ├─在STUN穿透环境中使用WEB服务 │ ├─动态端口带来的麻烦 │ ├─“隐藏端口”和固定端口 │ └─可用的解决方法 │ ├─使用邮件进行通知端口变化 │ └─使用HTTP重定向 │ ├─网络环境优化和STUN穿透规则设…

平板电视食用教程

先来看一道大家基本都能默写出来的题目: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入一个数 \(x\)。 删除一个数 \(x\)(若有多个相同的数,应只删除一个)。 定义排名为比当前数小的数的个数 \(+1\)。查询 \(x\) 的排名。 查询数据结…

企业集成模式-第十二章

十二、中场演练:系统管理示例管理控制台:显式所有组件的工作状态(下图一) 贷款中介的服务质量:监视请求响应时间 验证信用机构的操作:周期性地发送测试消息,希望确信该服务在正常运行(下图二) 信仰机构的故障恢复:如果信仰机构出现故障,希望把信用请求消息临时重定向…

平板电视从入门到精通

先来看一道大家基本都能默写出来的题目: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入一个数 \(x\)。 删除一个数 \(x\)(若有多个相同的数,应只删除一个)。 定义排名为比当前数小的数的个数 \(+1\)。查询 \(x\) 的排名。 查询数据结…

人月神话-摘抄

由于人员的分工,大型编程项目碰到的管理问题和小项目区别很大:我相信关键需要是维持产品自身的概念完整性。 1. 焦油坑(the tar pit) 过去几十年的大型系统开发犹如这样一个焦油坑,很多大型和强壮的动物在其中剧烈地挣扎。他们中大多数开发出了可运行的系统-不过,其中只有非…

Manjaro/Arch用怎么安装天翼云电脑(Ctyun-cloud-desk)?感谢信创,感谢国家

最近微信出了linux版,用vmware装linux不过瘾,把一台闲置的笔记本装上了Manjaro KDE Plasma,经过一段时间的发展,Linux桌面可用性大大提高。 Kindle->Kindle Mate->Anki这条路在linux下 我用 Kindle ->KindleVocab ->Anki这么代替了之后, 其他软件都能凑合用,…

Prometheus 和 Grafana 监控系统搭建

Prometheus 和 Grafana 监控系统的搭建和配置。Author: ACatSmiling Since: 2024-11-11Prometheus 的架构架构理解:Prometheus 既然设计为一个维度存储模型,可以把它理解为一个 OLAP 系统。 生态圈组件:Prometheus Server:主服务器,负责收集和存储时间序列数据。 Client L…