您的位置:首页 > 其它

elasticsearch RangeFilter实例-实现时间范围过滤

2015-09-30 00:00 543 查看
需求:我们搜索文章范围在近一年之内。这时候我们就用到elasticsearch RangeFilter了
具体例子如下:

long current=System.currentTimeMillis()/1000l;
Calendar ca = Calendar.getInstance();//得到一个Calendar的实例
ca.setTime(new Date());   //设置时间为当前时间
ca.add(Calendar.YEAR, -1); //年份减1
Date lastYear = ca.getTime();

QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder("中国经济");
queryBuilder.analyzer("ik").field("title");

FilteredQueryBuilder query = QueryBuilders.filteredQuery(
queryBuilder,
FilterBuilders.boolFilter()
.must(FilterBuilders.rangeFilter("updatetime").from(lastYear.getTime()/1000l).to(current)));

经测试,以上方式用于时间不行,其实直接用时间来进行计算就可以了:
如果updatetime在数据库里或在创建索引的时候是以Date格式保存的.那么直接可以这样写:
FilteredQueryBuilder query = QueryBuilders.filteredQuery(
queryBuilder,
FilterBuilders.boolFilter()
.must(FilterBuilders.rangeFilter("updatetime").from(otherDate).to(new Date())));

otherDate就是指一个时间 类型为java.util.Date
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: