`
hz_chenwenbiao
  • 浏览: 1010357 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

日期范围查询之hibernate search DateBridge使用

阅读更多

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全文索引的创建及查询

    除了基本的关键词查询,Hibernate Search还支持更复杂的查询表达式,如布尔逻辑、短语匹配、范围查询等。同时,你可以通过`setSort`方法来指定排序规则,以满足不同场景的需求。 在项目结构方面,`.classpath`和`....

    hibernateSearch+demo

    4. **查询构造**:Hibernate Search 支持 Lucene 查询语法,你可以使用 QueryBuilder 来构建复杂的查询表达式,包括关键词搜索、短语搜索、模糊搜索、范围查询等。 5. **分词器和分析器**:为了处理文本数据,...

    Hibernate Search In Action

    Hibernate Search将HQL与全文查询相结合,允许开发者使用HQL中已经熟悉的查询语法来进行全文搜索。这种转换使得从传统查询到全文搜索的过渡变得非常平滑,从而大大降低了学习曲线。 在高级搜索功能方面,Hibernate ...

    hibernate Search in action

    《Hibernate Search in Action》这本书深入探讨了Hibernate Search这一强大的全文搜索引擎集成框架,它将全文搜索功能无缝地融入到Java持久层框架Hibernate之中。通过利用Lucene库的强大功能,Hibernate Search为...

    Hibernate Search配置及简单应用

    **Hibernate Search配置及简单应用** Hibernate Search是Hibernate框架的一个扩展,它允许我们在应用程序中实现全文检索功能,使得数据库中的数据可以被快速、高效地搜索。这个功能尤其在处理大量文本数据时非常...

    基于Spring的Hibernate Search全文检索功能示例

    在现代Web应用开发中,全文检索功能已经成为提升...通过以上步骤,你可以在Spring应用中成功集成并使用Hibernate Search实现全文检索功能。记住,实际项目中需要根据具体需求进行调整和优化,以达到最佳的搜索体验。

    Hibernate搜索框架HibernateSearch.zip

    等通配符号),多关键字,模糊查询,排序等6,支持Clustering7,支持直接访问Lucene API8,对Lucene索引,API的高效管理Hibernate Search运行的环境如下:1、JDK或JRE 5.0以上2、Hibernate-Search以及相应的依赖包3...

    hibernate_search.pdf

    描述与标签:此文档详细介绍了Hibernate Search的使用与配置,一个为Hibernate ORM提供全文搜索功能的扩展。该文档版本为3.1.0.GA,深入探讨了如何将Apache Lucene集成到Hibernate ORM中,以实现高性能的全文检索。 ...

    Hibernate Search in action (pdf && code)

    《Hibernate Search in Action》是一本深入探讨Hibernate Search技术的专业书籍,配合源代码一同学习,能够帮助读者更好地理解和应用这项强大的全文检索和分析框架。Hibernate Search是Hibernate ORM的一个扩展,它...

    hibernate-search-5.5.4 api docset for Dash

    10. **Integration with Hibernate Criteria and HQL**:Hibernate Search可以与Hibernate的Criteria API和HQL集成,允许在查询中混合使用全文搜索和传统的关系型查询。 在使用"hibernate-search-5.5.4.docset"时,...

    Hibernate连表查询 Hibernate连表查询

    如果查询结果包含多个字段,并且希望将这些字段封装成一个对象,则可以使用Hibernate的投影列表功能,或者手动创建一个新的类来存储查询结果。 ### 总结 本文主要介绍了Hibernate中的连表查询方法及其在实际开发中...

    hibernate search4.2

    `FullTextQuery` 提供了构建全文查询的方法,支持 Lucene 的查询语法,也可以使用 Hibernate 的 Criteria API 或 HQL 来构建查询。 ### 性能优化 - 分布式索引:通过设置多个索引节点,实现索引的分布式存储和查询...

    hibernate-search-5.6.0.Alpha3-dist.zip

    Hibernate Search的核心功能是将对象模型与Lucene搜索引擎连接起来,允许开发者在数据库中的对象上执行全文搜索、范围查询和其他复杂的查询操作,而无需直接操作Lucene。5.6.0.Alpha3版本的发布,进一步增强了这个...

    Hibernate Search in Action

    Hibernate Search是一个在Hibernate ORM之上构建的搜索引擎,它允许开发者在Java应用中实现强大的、数据库集成的全文搜索功能。以下是对该主题的详细阐述: 1. Hibernate Search概述:Hibernate Search是一个开源...

    hibernate-search, Hibernate Search.zip

    hibernate-search, Hibernate Search Hibernate 搜索版本:5.8.0. Final - 13-09-2017描述针对Java对象的全文搜索这个项目提供 Hibernate ORM和全文索引服务( 如 Apache Lucene和 Elasticsearch

    hibernate-search-5.5.1.Final-dist.zip

    6. **分布式搜索**:在大型系统中,Hibernate Search支持分布式的索引存储和查询,提升系统的可扩展性。 三、核心概念 - **Entity Indexing**:对Java实体进行索引,每个实体实例都会在搜索引擎中对应一个文档。 - ...

    使用hibernate search实现全文检索和文档管理的例子

    使用hibernate search实现全文检索和文档管理功能: 1 全文检索 2 手动生成索引 3 文档上传(自动建立索引) 4 文档更新(自动建立索引) 5 文档删除 使用说明: 1 需要先恢复数据库 searchDB_2008sqlserver.bak 2 ...

Global site tag (gtag.js) - Google Analytics