如何在没有底层数据库的情况下使用Hibernate Search?

时间:2013-11-19 15:56:49

标签: hibernate search lucene hibernate-search

是否可以使用hibernate搜索功能而不使用hibernate核心作为数据库的东西?

我想创建一个带有标准Hibernate-Search注释的Bean,并手动存储所有内容以进行测试(我不想创建用于测试的Hibernate表)。

对于要使用@Indexed注释的类,我需要它是一个@Entity,但是因为我没有为这个类指定数据库内容而得到错误。

我的问题是:

如何仅将Hibernate Search用于Lucene管理?

4 个答案:

答案 0 :(得分:1)

最终你的hibernate需要知道数据库配置。当你注意到hibernate日志时,Hibernate引擎将首先注册类型,第二步它会查找hibernate配置属性,它将在后续步骤中进行解析和验证。我的这里指的是hibernate必须通知数据库信息...顺便说一句,你也可以发布你的错误细节以获得进一步的帮助..

Cheeers!

答案 1 :(得分:1)

如果其他一切都失败了,您可以使用one in-memorydatabases。在你进行测试后,他们会自我毁灭。

答案 2 :(得分:1)

我认为问题在于你的最终目标是什么?您是否希望在没有Hibernate ORM的情况下使用Hibernate Search,或者您只是在寻找一些测试解决方案?

您实际上可以使用没有Hibernate ORM的Hibernate Search独立版。但是,您必须实现多个SPI合约。这很麻烦,但可能。事实上,Infinispan Query(Infinispan的查询功能 - https://github.com/infinispan/infinispan/tree/master/query)就是这样做的。它使用Hibernate Search的引擎,没有ORM部分。搜索团队正在使用ORM来更轻松地使用搜索。密切关注即将发布的版本。

如果您只是想找一些方法来测试Hibernate Search + ORM,那么最好使用内存数据库。在这种情况下,这是进行单元测试的最简单方法。

答案 3 :(得分:0)

它是如何完成的(如果你有一个数据库,但你不想将索引的东西存储到其中):

创建一个虚拟的Entity类,其中包含您需要的所有信息,并按照这样的方式进行操作(示例来自我的代码和Suggest类)

        Transaction tx = fullTextSession.beginTransaction();

        fullTextSession.purgeAll(Suggest.class);

        SuggestionFinder suggestionFinder = context
                .getBean(SuggestionFinder.class);
        List<Suggest> toDelete = new ArrayList<>();
        int i = 0;
        for (Suggest sugg : suggestionFinder.findSuggestionsForIndex()) {
            fullTextSession.save(sugg);
            toDelete.add(sugg);
            fullTextSession.index(sugg);
            if (i++ % 1000 == 0) {
                fullTextSession.flushToIndexes();
                for (Suggest cur : toDelete) {
                    fullTextSession.delete(cur);
                }
                toDelete.clear();
            }
        }
        fullTextSession.flushToIndexes();
        for (Suggest cur : toDelete) {
            fullTextSession.delete(cur);
        }
        toDelete.clear();

        fullTextSession.getSearchFactory().optimize(Suggest.class);

        tx.commit();

编辑:

我已经实现了Hibernate-Search Standalone版本:

https://github.com/Hotware/Hibernate-Search-JPA/tree/master/hibernate-search-standalone