1.简介
本宝学习ES已经好久了,19年就接触到了ES,但是至今为止还不能随心所欲的操作es。因此这篇文章结合SQL查询数据的语句,来引出对应的ES查询语句。来加深对ES使用的熟练程度。
2.工具
- es-head:可视化工具,安装google插件
sense:这个插件是看一位博主的语雀笔记得到的 https://www.yuque.com/jelly-meonx/ryey1n/de5vtg
3.实战
3.1等值查询(term)
需求:查询spuId=106的所有数据
SQL语句
select * from goods where spuId=106
ES查询
GET 10.11.0.182:9200/goods/_search
{
"query": {
"term": {
"spuId": 106
}
}
}
3.2 in查询(terms)
- 需求:查询spuId 为 44,37,111的所有数据
SQL语句
select * from goods where spuId in (44,37,111)
ES查询
GET 10.11.0.182:9200/goods/_search
{
"query": {
"terms": {
"spuId": [44,37,111]
}
}
}
3.3范围查询(Range)
- 需求:查询 1<sales<200的数据
- SQL语句 ```sql
select * from goods where sales>1 and sales<200
- ES查询
```json
GET 10.11.0.182:9200/goods/_search
{
"query": {
"range" :{
"sales":{
"gt":1,
"lt":200
}
}
}
}
3.4主键in查询(IDS)
- 需求:查询id等于 1,2,3的数据
- SQL语句 ```sql
select * from goods where id in (1,2,3);
- ES查询
```json
GET 10.11.0.182:9200/goods/_search
{
"query": {
"ids" :{
"values":[1,2,3]
}
}
}
注:es的主键是 _id .
3.5模糊查询(Prefix/Regexp/Wildcard)
在SQL中的模糊查询就是 like关键字搞定的,但是在ES中有三种。
3.5.1前缀模糊查询(Prefix)
- 需求:查询shopName是以自营开头的
- SQL语句 ```sql
select * from goods where shopName like “自营%”;
- ES查询
```json
GET 10.11.0.182:9200/goods/_search
{
"query": {
"prefix" :{
"shopName":{
"value": "自营"
}
}
}
}
3.5.2正则表达式查询(Regexp)
- 需求: 查询mainTitle 为
%黑色%
的数据 - SQL语句 ```sql
select * from goods where mainTitle like %黑色%;
- ES查询
```json
GET 10.11.0.182:9200/goods/_search
{
"query": {
"regexp" :{
"mainTitle":{
"value": ".?黑色.?"
}
}
}
}
3.5.3通配符查询(Wildcard)
- 需求:查询mainTitle 为
%黑色%
的数据 - SQL语句 ```sql
select * from goods where mainTitle like %黑色%;
- ES查询
```json
GET 10.11.0.182:9200/goods/_search
{
"query": {
"wildcard" :{
"mainTitle":{
"value": "*黑色*"
}
}
}
}