测试用到的es查询语法这一篇就够~

最近测的项目数据流是先缓存到MQ,可通过es查询,以下是es查询语法做的笔记。
首先es中的search主要分为URI Search和 body Search

在这里插入图片描述

一、查询

1. URI 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有一些关键字 :

1.1 q 查询

GET data_1/_search?q=name:Judy

意为查询name为Judy的字段

1.2 q+df 指定字段查询

GET data_1/_search?q=Judy&df=name

意为在name字段里找一个值为Judy的

1.3 sort 排序

GET data_1/_search?q=Judy&df=name&sort=age:asc

意为以age正序排列

1. 4 size 展示的条数

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

1.5 timeout 超时时间

GET data_1/_search?q=Judy&df=name&sort=age:asc&size=2&timeout=1s

意为指定超时时间1s,默认是没有超时时间的

2. body Search

有时候参数比较复杂的,就不方便都写在url里,可以直接放在body里,下面是一些查询的写法笔记
query 查询的基本格式

GET data_1/_search
{
    "query":{
        "查询类型":{
            "查询条件":"查询条件值"
        }
    }
}

2.1 match_all 查询全部

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

2.2 match 指定查询条件

GET data_1/_search
{
	"query": {
		"match": {
		  "age":"28"
		}
	}
}

2.3 term关键字精确查询

term和 match一样的用法,查询结果我看也一样(要是有老师知道二者区别请告知一下呀)

GET data_1/_search
{
	"query": {
		"term": {
		  "age":"28"
		}
	}
}

也可以写成

GET data_1/_search
{
	"query": {
		"term": {
		  "age":{
		    "value": "28"
		  }
		}
	}
}

需要注意的是trem还有一个兄弟terms 多关键字精确查询

2.4 terms多关键字精确查询

GET data_1/_search
{
	"query": {
		"terms": {
		  "age": ["18","28"]
		}
	}
}

2.5 组合查询query filter

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
		}
	}
}

二、修改和插入

1.修改

修改直接用put 路径/id,成功结果会提示updated,还会提示是第几个版本。需要注意{}里应该是所有的参数(包括不修改的)
如:

PUT /data_1/_doc/wrmRhIQBypls-PGcmibv
{
          "age" : "21"
        }

在这里插入图片描述

2.插入

和修改一样,put 路径/id
结果会提示这是created

PUT /date_1/_doc/wrmRhIQBypls-PGcmib7
{
          "age" : "21"

        }

在这里插入图片描述

三、删除

1.有条件的删除

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…数据对应的数据总计是多少,可以用

1.es的聚合查询(aggs)

具体用法是:

GET /data_1/_search
{
    "size" : 0,
    "aggs" : { 
        "聚合名字(随便取)" : { 
            "terms" : { 
              "参数的名字" : "对应的值"
            }
        }
    }
}

然后

2.es也是支持sql的

POST /_index_name/sql?format=txt
{
  "query":"select * from index_name where id != 1"
}

执行sql就能查出来对应的数据。就是排版不太好看呀。不知有没有老师知道有没有支持es的查询工具可用?
在这里插入图片描述

如果后面有使用频率比较高的会更新上来~

3.es按字段长度查询

2024-5-9更新
最近测试时统计的数据需要统计长度只为10的。这里要用到长度查询

GET data_1/_search
{
  "query": {
    "script": {
      "script": {
        "source": "doc['字段名称'].value.length() == 10",
        "lang": "painless"
      }
    }
  }
}

同理,如果是大于小于 换一下符号就可以。

4.es按字段大小查询

扩展查询某字段大于等于10的数据

GET  data_1/_search
{
  "query":{
  "range":{
      "字段名":{
        "gte": 10
      }
    }
  }
}

gte 是大于等于
gt是大于
lte是小于等于
lt是小于

5.查否语句

就是sql里的not

GET 索引地址/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "字段名": "字段值"
          }
        }
      ]
    }
  }
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值