2012-02-28 134 views
0

我正在构建一个WebService(CXF with Spring和JPA)来搜索一个只读数据库表,即一个数据库中我只有读权限的表,我不能在那里改变任何东西。如何构建只读数据库表的索引搜索?

我需要为此表的一些字段实施全文搜索,并且查询它太慢(它是一个书籍数据库,每本书的标题,作者和关键字),所以我需要建立一个索引为了它。

我想了解Hibernate Search是否可以帮助我,以及如何去做。 我认为它不会导致文档说它在实体更新时建立索引(这在我的WebService中从未如此)。但我对它的所有术语都陌生,所以我可以误解事物。

这将是一个很好的路径吗? 我应该先学些什么来更好地理解我需要做的事情? 在此先感谢!

回答

2

我认为Hibernate Search可以很好地适合您的问题,因为它允许您在文件系统上构建/保留索引。这样数据库保持不变。鉴于您已经在使用JPA,启用Hibernate Search应该非常容易。您基本上只需要获取Hibernate Search jar文件并将其添加到您的项目中,然后使用@Indexed注释要编入索引的实体以及要使用@Field索引的字段。当然这是非常简单的,但在线文档应该帮助你。有一个入门部分解释基础知识。一旦你这一点,你可以更深入地了解不同的分析仪等 - http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/

我想了解是否Hibernate Search的帮助我了,并且 我怎么能去了解它。我认为它不会导致文档说 它在实体更新时建立索引(这在我的WebService中从来不是 大小写)。但我对它的所有术语都很陌生,因此我可能会误解事物。

那么,搜索将帮助您通过自动索引更新来保持您的索引和数据库同步读/写应用程序。但是,Search还有一个编程API用于创建初始索引或在您认为合适时手动重建索引。有几种方法可以做到这一点,但它可以是简单的:

EntityManager em = entityManagerFactory.createEntityManager(); 
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(em); 
fullTextEntityManager.createIndexer().startAndWait(); 

同样,文档有更多的例子。我建议您按照入门示例进行操作,并跟进遇到的具体问题/问题。

+0

正是我需要的。非常感谢! – elias 2012-02-29 17:30:19