如何构建只读数据库表的索引搜索?

时间:2012-02-28 15:53:05

标签: java lucene full-text-search hibernate-search

我正在构建一个WebService(带有Spring和JPA的CXF)来搜索只读数据库表,即一个数据库中的表我只有读取权限,我不能在那里更改任何内容。

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

我试图理解Hibernate Search是否能帮助我,以及我如何能够解决这个问题。 我认为它不能导致文档说它在实体更新时构建索引(在我的WebService中从来不是这种情况)。但我对它的所有术语都不熟悉,所以我可以曲解一些东西。

走这条路会有什么好路? 我应该先学习什么才能更好地了解我需要做什么? 提前谢谢!

1 个答案:

答案 0 :(得分: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();

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