hibernate search 使用串和数的索引和查询都比较简单,但使用日期类型建索引和查询就稍麻烦一点:
1 在日期属性上加入@DateBridge注解,如:
/*
* Resolution.YEAR: yyyy Resolution.MONTH: yyyyMM Resolution.DAY: yyyyMMdd Resolution.HOUR: yyyyMMddHH Resolution.MINUTE: yyyyMMddHHmm Resolution.SECOND: yyyyMMddHHmmss Resolution.MILLISECOND: yyyyMMddHHmmssSSS
*/
@Field(name="beginDate" , index = Index.UN_TOKENIZED , store = Store.NO)
@DateBridge(resolution = Resolution.MINUTE)//将日期类型转为string,直到分钟级
private Date beginDate; //开始时间
@Field(name="endDate" , index = Index.UN_TOKENIZED , store = Store.NO)
@DateBridge(resolution = Resolution.MINUTE)
private Date endDate; //结束时间
使用resolution就可以将日期类型转换为string类型,再建索引,resolution可以有多种形式,见:http://docs.jboss.org/hibernate/stable/search/api/org/hibernate/search/bridge/builtin/DateBridge.html
2 建立索引后,进行查询,可以像上一篇《hibernate search和lucene结合使用实例》文章那样使用过滤器的方式,如直接加入检搜条件来搜索:
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmm");
String beginDateString;
String endDateString;
if( beginDate != null && endDate != null ){//开始与结束时间都给出
// RangeQuery rangeQuery = new RangeQuery("",beginDate ,endDate,true,true);
beginDateString = df.format(beginDate);
endDateString = df.format(endDate);
RangeQuery startDateRange = new RangeQuery(new Term("beginDate", beginDateString), new Term("beginDate", endDateString), true);
RangeQuery endDateRange = new RangeQuery(new Term("endDate", beginDateString), new Term("endDate" , endDateString), true);
bQuery.add(startDateRange,Occur.MUST);
bQuery.add(endDateRange,Occur.MUST);
}
else if(beginDate != null && endDate == null ){//只给出开始时间
beginDateString = df.format(beginDate);
RangeQuery startDateRange = new RangeQuery(new Term("beginDate", beginDateString), null , true);
bQuery.add(startDateRange,Occur.MUST);
}
else if(endDate != null && beginDate == null){//只给出了结束时间
endDateString = df.format(endDate);
RangeQuery endDateRange = new RangeQuery(null, new Term("endDate" , endDateString), true);
bQuery.add(endDateRange,Occur.MUST);
}
对上面的代码作一下说明:RangeQuery的第一个参数设定左边范围,即指定的field的下界是多少,若没有下界,那么这个参数就是null,而第二个参数是设定右边范围,即指定的field的上界是多少,没有上界,那么这个参数为null,第三个参数为边界值是否包括在内,true表示包括,false表示不包括。
我使用的是lucene2.4.1包,所以这里的查询方式如上面,lucene的版本更高,范围查询具体方式有所不同。范围查询具体见下一篇《lunce3.0范围查找TermRangeQuery》
分享到:
相关推荐
Hibernate Search is a library providing full-text search capabilities to Hibernate. It opens doors to more human friendly and efficient search engines while still following the Hibernate and Java ...
HibernateSearch的使用方法
hibernate search全文索引的创建与查询实例 hibernate-search-analyzers-4.1.1.Final.jar
等通配符号),多关键字,模糊查询,排序等6,支持Clustering7,支持直接访问Lucene API8,对Lucene索引,API的高效管理Hibernate Search运行的环境如下:1、JDK或JRE 5.0以上2、Hibernate-Search以及相应的依赖包3...
hibernate Search in action
hibernate-search, Hibernate Search Hibernate 搜索版本:5.8.0. Final - 13-09-2017描述针对Java对象的全文搜索这个项目提供 Hibernate ORM和全文索引服务( 如 Apache Lucene和 Elasticsearch
使用hibernate search实现全文检索和文档管理功能: 1 全文检索 2 手动生成索引 3 文档上传(自动建立索引) 4 文档更新(自动建立索引) 5 文档删除 使用说明: 1 需要先恢复数据库 searchDB_2008sqlserver.bak 2 ...
hibernate查询之HQLhibernate查询之HQLhibernate查询之HQL
hibernate search 开发环境的搭建。
hibernate search 里面有关于代码的详细说明 请看readme txt 有相关jar直接运行
Hibernate Search 4.4.0.Final API 帮助文档
Hibernate连表查询 Hibernate连表查询
hibernate_search.pdf
Hibernate Search in Action introduces both the principles of enterprise search and the implementation details a Java developer will need to use Hibernate Search effectively. This book blends the ...
基于Spring的Hibernate Search全文检索功能示例 实例下载
压缩包包括项目完整代码,详细说明和项目结构图,效果图 项目实现了分页和高亮显示 MAVEN项目:HibernateSearchDemo IDE :MyEclipse jdk :1.6 数据库 :MySql ...hibernate search 版本 4.4.1.Final
hibernate-search-3.4.1 api chm
Hibernate Search in action (pdf && code)
Hibernate官方提供的最新版本hibernate-search-4.5.1.Final-dist.zip hibernate-search-4.5.1.Final-dist\hibernate-search-4.5.1.Final\dist\lib required所有包和provided的jta-1.1.jar导入项目工程下lib即可