赞
踩
最近测的项目数据流是先缓存到MQ,可通过es查询,以下是es查询语法做的笔记。
首先es中的search主要分为URI Search和 body Search
URI Search 查询条件跟在_search?后面,
例如:GET 索引名称/_search?1=1
GET 索引名称 就像是select * from emp
注意这个索引名称可以是一个,也可以是多个
如
GET /_search
GET data_1/_search
GET data_1,data_2/_search
GET data_*/_search
/_search? 就像是where
1=1 就是查询的条件
URI Search有一些关键字 :
GET data_1/_search?q=name:Judy
意为查询name为Judy的字段
GET data_1/_search?q=Judy&df=name
意为在name字段里找一个值为Judy的
GET data_1/_search?q=Judy&df=name&sort=age:asc
意为以age正序排列
GET data_1/_search?q=Judy&df=name&sort=age:asc&size=2
意味展示前2条数据,用es查询时默认是size=10。 如果加上from就是从第几页开始 ,默认是0
GET data_1/_search?q=Judy&df=name&sort=age:asc&size=2&from=6
GET data_1/_search?q=Judy&df=name&sort=age:asc&size=2&timeout=1s
意为指定超时时间1s,默认是没有超时时间的
有时候参数比较复杂的,就不方便都写在url里,可以直接放在body里,下面是一些查询的写法笔记
query 查询的基本格式
GET data_1/_search
{
"query":{
"查询类型":{
"查询条件":"查询条件值"
}
}
}
GET data_1/_search
{
"query": {
"match_all": {}
}
}
GET data_1/_search
{
"query": {
"match": {
"age":"28"
}
}
}
term和 match一样的用法,查询结果我看也一样(要是有老师知道二者区别请告知一下呀)
GET data_1/_search
{
"query": {
"term": {
"age":"28"
}
}
}
也可以写成
GET data_1/_search
{
"query": {
"term": {
"age":{
"value": "28"
}
}
}
}
需要注意的是trem还有一个兄弟terms 多关键字精确查询
GET data_1/_search
{
"query": {
"terms": {
"age": ["18","28"]
}
}
}
GET data_1/_search
{
"query": {
"bool": {
"filter": [
{
"term": {
"age": "20"
}
},
{
"term": {
"class": "1"
}
}
]
}
}
}
以下是开发帮我写的一段查询一定时间范围内的数据,关键字我改了下,可以参考写法
GET data_1/_search
{
"size": 10,
"query": {
"bool": {
"filter": [{
"range": {
"statDate": {
"from": 1668355200000,
"to": 1668441600000,
"include_lower": true,
"include_upper": true,
"boost": 1.0
}
}
}, {
"term": {
"age": {
"value": 3,
"boost": 1.0
}
}
}],
"adjust_pure_negative": true,
"boost": 1.0
}
}
}
修改直接用put 路径/id,成功结果会提示updated,还会提示是第几个版本。需要注意{}里应该是所有的参数(包括不修改的)
如:
PUT /data_1/_doc/wrmRhIQBypls-PGcmibv
{
"age" : "21"
}
和修改一样,put 路径/id
结果会提示这是created
PUT /date_1/_doc/wrmRhIQBypls-PGcmib7
{
"age" : "21"
}
POST /data_1/_delete_by_query
{
"query": {
"term": {
"age": {
"value": "21"
}
}
}
}
意味指定删除data_1里age为21的数据
POST /data_1/_delete_by_query
{
"query":{
"match":{
"_id": "frakg4QBypls-PGc4jpw"
}
}
}
意味指定删除data_1里_id为frakg4QBypls-PGc4jpw的数据
整理就这么多啦,这些语句基本测试够用了。如果后面有使用频率比较高的会更新上来~
#2023-3-31更新
最近有个项目又是推MQ消费存ES,测试时把这篇笔记拿出来看,发现里面用的查询语句已经不能满足我啦。比如我想查询分组的数据(类似sql里的group by),或者是查询具体的一小部分数据详细的是什么样子的(类似不等于大部分值),在这里记录一下。
当我想查询机构1和机构2…数据对应的数据总计是多少,可以用
具体用法是:
GET /data_1/_search
{
"size" : 0,
"aggs" : {
"聚合名字(随便取)" : {
"terms" : {
"参数的名字" : "对应的值"
}
}
}
}
然后
POST /_index_name/sql?format=txt
{
"query":"select * from index_name where id != 1"
}
执行sql就能查出来对应的数据。就是排版不太好看呀。不知有没有老师知道有没有支持es的查询工具可用?
如果后面有使用频率比较高的会更新上来~
2024-5-9更新
最近测试时统计的数据需要统计长度只为10的。这里要用到长度查询
GET data_1/_search
{
"query": {
"script": {
"script": {
"source": "doc['字段名称'].value.length() == 10",
"lang": "painless"
}
}
}
}
同理,如果是大于小于 换一下符号就可以。
扩展查询某字段大于等于10的数据
GET data_1/_search
{
"query":{
"range":{
"字段名":{
"gte": 10
}
}
}
}
gte 是大于等于
gt是大于
lte是小于等于
lt是小于
就是sql里的not
GET 索引地址/_search
{
"query": {
"bool": {
"must_not": [
{
"match": {
"字段名": "字段值"
}
}
]
}
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。