SELECT * FROM device_monitor_attr_his where deviceID=27143 AND monKey=107 AND createTime >= '2022-01-01 00:00:00' AND createTime <= '2022-01-02 00:00:00' order by createTime desc limit 0 , 10;用elasticesesarch怎么写?
时间: 2024-03-05 16:54:56 浏览: 51
你可以使用Elasticsearch的查询DSL语言来转换这个SQL查询语句。一个等效的Elasticsearch查询应该如下所示:
```
GET device_monitor_attr_his/_search
{
"query": {
"bool": {
"must": [
{"match": {"deviceID": "27143"}},
{"match": {"monKey": "107"}},
{"range": {"createTime": {"gte": "2022-01-01 00:00:00", "lte": "2022-01-02 00:00:00"}}}
]
}
},
"sort": [
{"createTime": {"order": "desc"}}
],
"size": 10,
"from": 0
}
```
这个查询使用bool查询来组合三个条件:设备ID为27143,监控键为107,创建时间在2022年1月1日到2日之间。之后,按照创建时间降序排序,然后返回从0开始的10条记录。
相关问题
SELECT count(*) FROM device_monitor_attr_his where deviceID=27143 AND monKey=107 AND createTime >= '2022-01-01 00:00:00' AND createTime <= '2022-01-02 00:00:00'用elasticesesarch怎么写?
在 Elasticsearch 中,可以使用以下语句来实现上述 SQL 查询:
```
POST /device_monitor_attr_his/_search
{
"query": {
"bool": {
"must": [
{"match": {"deviceID": "27143"}},
{"match": {"monKey": "107"}},
{"range": {"createTime": {"gte": "2022-01-01T00:00:00", "lte": "2022-01-02T00:00:00"}}}
]
}
}
}
```
其中,`device_monitor_attr_his` 是 Elasticsearch 索引名,`deviceID`、`monKey` 和 `createTime` 是索引中的字段名,`27143` 和 `107` 是对应的字段值,`2022-01-01T00:00:00` 和 `2022-01-02T00:00:00` 是时间范围。这个查询将返回匹配条件的文档总数。
SELECT DATE_FORMAT(t1.createTime, '%Y%m%d%H') AS monTime, IFNULL(t1.monValue,0) AS monValue FROM device_monitor_attr_his t1 INNER JOIN (SELECT MAX(id) id FROM device_monitor_attr_his t where deviceID=27143 AND monKey=107 AND createTime > '2023-03-03' AND createTime < '2023-06-02 23:59:59' GROUP BY DATE_FORMAT(createTime,'%Y%m%d') ) t2 on t2.id = t1.id 转换成elasticsearch怎么写?
这个 SQL 查询可以转换成 Elasticsearch 的聚合查询,具体的查询语句如下:
```
GET /_search
{
"query": {
"bool": {
"must": [
{
"match": {
"deviceID": 27143
}
},
{
"match": {
"monKey": 107
}
},
{
"range": {
"createTime": {
"gte": "2023-03-03",
"lt": "2023-06-02T23:59:59"
}
}
}
]
}
},
"aggs": {
"group_by_date": {
"date_histogram": {
"field": "createTime",
"interval": "day",
"format": "yyyy-MM-dd"
},
"aggs": {
"max_id": {
"max": {
"field": "id"
}
},
"mon_value": {
"terms": {
"script": {
"source": "doc['monValue'].value ?: 0"
}
}
}
}
}
}
}
```
这个查询使用了 Elasticsearch 的聚合查询,首先根据设备 ID、监控指标和时间范围来过滤数据,然后再按照每天的日期进行分组,并且对每个分组内的数据进行聚合计算,其中包括求出每个分组内的最大 ID 值和计算 monValue 的和。注意,这里使用了 Elasticsearch 的脚本语言来处理 monValue 的空值,如果 monValue 为空,则将其值设置为 0。
阅读全文