【问题标题】:How to build an index search for a read-only database table?如何为只读数据库表建立索引搜索?
【发布时间】:2012-02-28 15:53:04
【问题描述】:

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

我需要对该表的某些字段进行全文搜索,查询速度太慢(这是一个书籍数据库,每本书都有标题,作者和关键字)所以我需要为它。

我正在尝试了解 Hibernate Search 是否可以帮助我解决这个问题,以及我该如何去做。 我认为它不会导致文档说它在更新实体时构建索引(在我的 WebService 中从来没有这种情况)。但我对它的所有术语都很陌生,所以我可能会误解。

什么是解决这个问题的好方法? 我应该先学习什么才能更好地了解我需要做什么? 提前致谢!

【问题讨论】:

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


    【解决方案1】:

    我认为 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 中的案例)。但我对它的所有术语都不熟悉,所以我 可能会误解事物。

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

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

    同样,文档有更多示例。我建议您遵循入门示例并跟进您遇到的具体问题/问题。

    【讨论】:

    • 正是我所需要的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2012-07-23
    • 2022-11-02
    • 1970-01-01
    • 2012-07-28
    相关资源
    最近更新 更多