问题:
- 如何使用es 实现 sql 中的>= and <=
- range,sql中的between,或者是>=1,<=1
- range做范围过滤
例子1
为帖子数据增加浏览量的字段:view_cnt 浏览量
POST /forum/article/_bulk
{ "update": { "_id": "1"} }
{ "doc" : {"view_cnt" : 30} }
{ "update": { "_id": "2"} }
{ "doc" : {"view_cnt" : 50} }
{ "update": { "_id": "3"} }
{ "doc" : {"view_cnt" : 100} }
{ "update": { "_id": "4"} }
{ "doc" : {"view_cnt" : 80} }
搜索浏览量在30~60之间的帖子
POST /forum/article/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"view_cnt": {
"gt": 30,
"lt": 60
}
}
}
}
}
}
range有几种方式
- from,to:用于时间范围
- gt,lt:用于数值范围
方式一:
"range": {
"date": {
"from": "2015/01/01 12:10:30",
"to": "2015/01/03 10:10:30",
"include_lower": false
"include_upper": false
}
}
range:查询,范围查询
有from,to,include_lower,include_upper,boost这些参数
include_lower:是否包含左边的边界,默认为true
include_upper:是否包含右边的边界,默认为true
方式二:
"range": {
"view_cnt": {
"gt": 30,
"lt": 60
}
}
gt:大于
lt:小于
gte 大等于
lte 小等于
例子2
搜索发帖日期在最近1个月的帖子。
POST /forum/article/_bulk
{ "index": { "_id": 5 }}
{ "articleID" : "DHJK-B-1395-#Ky5", "userID" : 3, "hidden": false, "postDate": "2017-03-01", "tag": ["elasticsearch"], "tag_cnt": 1, "view_cnt": 10 }
方式一
GET /forum/article/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"postDate": {
"gt": "2017-03-10||-30d"
}
}
}
}
}
}
方式二:使用now,now表示当前时间
GET /forum/article/_search
{
"query": {
"constant_score": {
"filter": {
"range": {
"postDate": {
"gt": "now-30d"
}
}
}
}
}
}