- 浏览: 1007994 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (394)
- OSGI (14)
- 多线程 (10)
- 数据库 (30)
- J2ME (1)
- JAVA基础知识 (46)
- 引用包 (1)
- 设计模式 (7)
- 工作流 (2)
- Ubuntu (7)
- 搜索引擎 (6)
- QT (2)
- Ubuntu下编程 (1)
- 小程序 (2)
- UML (1)
- Servlet (10)
- spring (16)
- IM (12)
- 文档视频转为flash格式在线播放 (19)
- Maven (8)
- 远程调用 (2)
- PHPRPC (1)
- EXTJS学习 (2)
- Hibernate (16)
- 技术文章 (38)
- flex (5)
- 海量数据处理 (5)
- FTP (8)
- JS (10)
- Struts (1)
- hibernate search (13)
- JQuery (2)
- EMail (3)
- 算法 (4)
- SVN (7)
- JFreeChart (4)
- 面试 (4)
- 正规表达式 (2)
- 数据库性能优化 (10)
- JVM (6)
- Http Session Cookie (7)
- 网络 (12)
- Hadoop (2)
- 性能 (1)
最新评论
-
hy1235366:
能够随便也发一下,你退火算法程序使用的DistanceMatr ...
模拟退火算法总结(含例子)(转) -
梅强强:
感谢分享。。帮大忙了
swftools转换文件时线程堵塞问题的解决方法 -
wenlongsust:
openoffice和文件不在同一个服务器上,用过吗?
[JODConverter]word转pdf心得分享(转) -
2047699523:
如何在java Web项目中开发WebService接口htt ...
利用Java编写简单的WebService实例 -
abingpow:
唉,看起来好像很详细很不错的样子,可惜不是篇面向初学者的文章, ...
Spring与OSGi的整合(二)(转)
最近的一个项目正好运用了Hibernate Search 的全文检索功能,所以就研究了一下。通过一小段的简单研究终于在项目俩面运用了起来。所以来简单记录一下。希望能对大家有所帮助。 首先来几个概念吧。:) Hibernate Search 是什么? 我的理解 hibernate search 就是hibernate里面一个基于lucence开发的全文检索功能模块。 Hibernate Search项目的主要特性包含以下几个方面: 2.数据的自动插入和更新——当一个对象通过Hibernate添加或更新时,索引也会相应进行透明的更新; 3.支持众多复杂的搜索方式——可快速的使用通配符进行搜索,以及多关键词全文检索(multi-word text searches)和近似或同义词搜索(approximation/synonym searches),或根据相关性排列搜索结果; 4.搜索集群(Search Clustering)——Hibernate Search提供了内建搜索集群解决方案,其中包括一个基于JMS的异步查询和索引系统; 5.对Lucene API接口的直接调用——如果用户打算处理某些特别复杂的问题,可以在查询中直接使用Lucene提供的API接口; 6.对Lucene的自动管理——Hibernate Search可以管理并优化Lucene的索引,并且非常高效地使用Lucene的API接口。 Hibernate Search相关的Annotation主要有三个: 在maven的pom.xml文件中加入以下几个依赖包
1.Lucene集成——作为强大高效的检索引擎,Lucene的美名早已久经考验了;
store 指定是否索引,与Lucene相同
name 指定Field的name,默认为类属性的名称
analyzer 指定分析器<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-search</artifactId>
<version>3.1.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.4.0.GA</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.5.2</version>
</dependency>
<!-- hibernate framework end -->
<!-- lucene start -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-highlighter</artifactId>
<version>2.4.0</version>
</dependency>
在spring的配置文件中加入如下hibernate searhch 的配置
<property name="hibernateProperties"> <props> <prop key="hibernate.connection.autocommit">true</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect </prop> <prop key="hibernate.query.factory_class"> org.hibernate.hql.ast.ASTQueryTranslatorFactory </prop> <prop key="hibernate.search.default.directory_provider"> org.hibernate.search.store.FSDirectoryProvider </prop> <prop key="hibernate.search.worker.batch_size"> 1000</prop> <prop key="hibernate.search.default.indexBase"> d:/index</prop> <prop key="hibernate.search.analyzer"> org.apache.lucene.analysis.cjk.CJKAnalyzer</prop> </props> </property> <property name="eventListeners"> <map> <entry key="post-update"> <bean class="org.hibernate.search.event.FullTextIndexEventListener" /> </entry> <entry key="post-insert"> <bean class="org.hibernate.search.event.FullTextIndexEventListener" /> </entry> <entry key="post-delete"> <bean class="org.hibernate.search.event.FullTextIndexEventListener" /> </entry> </map> </property>以上配置包括了建立索引批量提交设置,索引文件生成的位置,还有建立索引的时候的词法分析器的制定。
还有就是事件监听的配置。上面的配置目的是针对所以对象的增删该查自动监听并建立索引文件。
下面简单建立一个pojo的 索引配置
@Entity @Table(name="B2C_COMMODITY") @Indexed(index="newindexs/commodity") @SuppressWarnings("serial") public class B2cCommodity implements java.io.Serializable { private String id; private String commodityNo; private String commodityName; private String introduction; private String keyword; private BigDecimal sellPrice; @Id @Column(name="id",length=32) @GeneratedValue (generator="UUDI_KEY") @GenericGenerator(name="UUDI_KEY", strategy="uuid.hex") public String getId() { return this.id; } public void setId(String id) { this.id = id; } @Transient @Field(index=Index.TOKENIZED) public String getContent() { return this.commodityName+" "+this.introduction+" "+this.keyword; } @Transient @Field(index=Index.UN_TOKENIZED) public String getIndexedSellPrice() {//用于索引的商品售价 String tmp = this.getSellPrice().toString(); return SearchUtil.makeIndexedPrice(tmp); } @Column(name="COMMODITY_NAME", nullable=false, length=300) public String getCommodityName() { return this.commodityName; } public void setCommodityName(String commodityName) { this.commodityName = commodityName; } @Column(name = "INTRODUCTION", length = 9000000) public String getIntroduction() { return this.introduction; } public void setIntroduction(String introduction) { this.introduction = introduction; } @Column(name="SELL_PRICE", nullable=false, precision=18) public BigDecimal getSellPrice() { return this.sellPrice; } public void setSellPrice(BigDecimal sellPrice) { this.sellPrice = sellPrice; } @Column(name="KEYWORD", length=200) public String getKeyword() { return this.keyword; } public void setKeyword(String keyword) { this.keyword = keyword; } }看到上面的配置大家可能有些疑问 ,我没有在原有的数据库列上面直接建立索引,而是将原有的多个列建立在了一个 content 列上。
这是为了解决多条件符合查询的时候的一个简便方法,例如我输入关键字 “男装” 我既想搜索 标题 又想所有 内容,还想搜索 介绍。那么我将这三个字段组合在一起建立一个content索引。在搜索的时候直接搜索 content 字段就可以了。而不用再麻烦 hibernate search 的 MultiFieldQueryParser 出入多个条件查询多个索引列了。只要查询一个就可以了。
上面的配置就设置基本完成了
/** * 测试建立索引,配置了事件监听后根据增删改查自动更新索引文件 * @return */ @RequestMapping("/view/testMakeIndex.htm") public String testMakeIndex(){ B2cCommodity obj = new B2cCommodity(); obj.setCommodityNo("123456789"); obj.setCommodityName("测试"); obj.setIntroduction("测试lucence程序"); obj.setStoreId("00000121"); obj.setSellPrice(new BigDecimal("10")); obj.setOnShelf("1"); obj.setCommodityNumber(100); obj.setFreezeStatus('1'); obj.setDelFlag('1'); obj.setRegRegionId("000001"); obj.setCreateBy("ylm"); obj.setCreateTime(new Date()); commodityDAO.saveCommodity(obj); return "/view/testIndexSearch.htm"; }只要跟平常运用hibernate pojo 操作增删该查数据库一样 就可以自动更新索引文件了
查询所以文件测试代码如下:
/** * 测试查询索引文件 * @return * @throws ParseException */ @RequestMapping("/view/testIndexSearch.htm") public String testIndexSearch() throws ParseException{ FullTextSession fullTextSession = Search.createFullTextSession(commodityDAO.getSessionFactory().openSession()); MultiFieldQueryParser parser = new MultiFieldQueryParser(new String[] {"content" }, new StandardAnalyzer()); org.apache.lucene.search.Query luceneQuery = parser.parse("测试"); FullTextQuery query = fullTextSession.createFullTextQuery(luceneQuery,B2cCommodity.class); // 添加分页查询 query.setFirstResult(0); query.setMaxResults(100); // 对查询结果按name进行排序 List result = query.list(); return "/view/testIndexSearch.htm"; }以上是一个简单的配置和测试的例子
发表评论
-
重建索引
2011-03-24 16:36 2229使用hibernate search后,就会在加载hib ... -
hibernate search 组合搜索方式
2011-03-24 16:06 2386使用hibernate search来搜索一个加入索引的信息时 ... -
lucene3.0范围查找TermRangeQuery(转)
2011-01-24 16:09 2149在lucene3.0中,范围查询也有很大的变化,Range ... -
日期范围查询之hibernate search DateBridge使用
2011-01-24 15:54 4389hibernate search 使用串和数的索引和查询都比较 ... -
hibernate search 和lucene结合使用实例(转)
2011-01-24 09:42 2624以下的代码是根据api帮助文档作出的一个简单实例,在 ... -
hibernate search手动建索引和组合条件搜索(转)
2011-01-21 14:03 2208近日需要做一下搜索的功能,之前就听说过hibernate se ... -
hibernate-search-3.3.0.Final中文文档翻译及学习笔记(转)
2011-01-10 13:48 2316开始只是自己看,没想到要翻译,从第四章开始进行翻译,主要章节基 ... -
Hibernate Search ClassBridge来解决附件同步索引的问题(转)
2010-12-16 09:46 1838我有个类 Issue,但是它的附件并不放在数据库当中,而是放在 ... -
将文件内容加入索引
2010-12-07 17:20 1290上一篇是使用hibernate search的一个文档说明, ... -
Field Bridge 将上传文件内容加入全文检索(转)
2010-12-07 09:28 1455下面是转载hibernate search的使用文档,例子有些 ... -
hibernate search 学习笔记
2010-12-02 13:20 17291 使用hibernate search 时,当你的字段加入了 ... -
Web开发教程12-Hibernate Search(转)
2010-12-02 12:58 3487Hibernate Search是Hibernat ...
相关推荐
3. **Hibernate Search**:作为Hibernate的一个扩展,Hibernate Search提供了基于Lucene的全文检索功能,使得在数据库中的数据可以被快速、精确地搜索。 **二、集成Hibernate Search** 1. **配置依赖**:首先,你...
- **Hibernate Search 3.4.0.Final**:提供了基于Lucene的全文检索功能,方便地将全文检索功能集成到Hibernate应用中。 #### 四、整体架构概述 此项目构建了一个集成了全文检索功能的应用系统,具体架构如下: 1....
Hibernate Search是Hibernate ORM框架的一个扩展,它提供了在数据库中进行全文本搜索的功能。"dis"可能是“distribution”的缩写,意味着这是一个完整发布的包,包含了所有必要的组件和库。 **描述解析:** 描述中...
同时,随着技术的发展,Spring Boot和Spring Data等更高级别的抽象也应运而生,进一步简化了基于Spring的应用开发,而Hibernate也在不断进化,如Hibernate ORM和Hibernate Search等,提供了更多功能和优化。...
1. **全文检索**:通过使用Apache Lucene库,Hibernate Search能对数据库中的文本字段建立索引,支持模糊匹配、短语查询、词语权重调整等多种全文搜索功能。 2. **多语言支持**:支持多种语言的分词和排序,包括...
这个项目旨在展示如何在Java应用程序中有效地利用这三个强大的开源框架,以实现高效的数据存储、检索和全文搜索功能。 Compass是一款基于Lucene的全文搜索引擎库,它为Java应用程序提供了一个简单易用的接口,用于...
《Hibernate Search 5.3.0.Final:SSH环境下的全文检索增强框架详解》 Hibernate Search是Hibernate ORM的一个扩展,它提供了在Java应用中进行全文检索的能力。在5.3.0.Final版本中,这一功能得到了进一步的优化和...
标题中的“hibernate-search-orm-5.0.0.Alpha1.zip”指的是Hibernate Search ORM的一个早期版本,它是Hibernate框架的一个扩展,提供了在数据库中进行全文搜索和索引的功能。Hibernate是一个广泛使用的Java对象关系...
2. **搜索引擎**:集成Lucene或Elasticsearch提升查询效率,支持全文搜索。 3. **异常处理**:通过统一的异常处理器捕获并处理可能出现的异常,提高系统稳定性。 4. **日志记录**:使用Log4j或Logback记录系统运行...
Hibernate Search与Spring、Hibernate ORM和其他Java框架有良好的集成,提供了简洁的API,使得开发人员可以轻松地将全文搜索功能融入到现有项目中。 综上所述,Hibernate Search 4.1.1.Final是一个强大且全面的...
3. Hibernate Search:这是Hibernate的一个扩展,提供了全文搜索引擎的功能,允许开发者对数据库中的数据进行高效的全文检索。在企业信息管理系统中,Hibernate Search可以用来实现复杂的查询需求,比如模糊搜索、...
Hibernate Search 是一个基于 Hibernate ORM 和 Apache Lucene 的开源项目,它提供了将 Hibernate 实体类自动索引到 Lucene 索引中的功能。通过这种方式,可以实现对实体数据的快速全文搜索,并且这些操作与普通的 ...
`hibernate-search-engine-4.2.0.Beta2.jar`和`hibernate-search-orm-4.2.0.Beta2.jar`就是Hibernate Search的相关组件,它们提供了对Lucene的集成,使得我们能够在Hibernate ORM的基础上实现高效、复杂的全文检索。...
我们可以利用Spring Boot集成各种服务,如数据持久化(JPA与Hibernate)、安全控制(Spring Security)、任务调度(Spring Scheduler)等,实现档案的存储、查询、权限控制以及定时备份等功能。 其次,系统设计上,...
Hibernate Search结合了Lucene搜索引擎,允许开发者在数据库中执行复杂的全文检索,而不仅仅是基于简单的键值匹配。5.5版本的Hibernate Search可能包含了更高效的索引管理、更强大的分析器配置和更灵活的查询构造...
同时,还创建了一个名为"queue/hibernatesearch"的队列,用于存储Hibernate Search的消息。 另外,JNDI资源也需要在Tomcat的`MEAT-INF/context.xml`文件中配置,包括JMS Connection Factory和Queue。这使得应用程序...