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

v9tzhpje  于 2022-11-07  发布在  Lucene
关注(0)|答案(4)|浏览(301)

有没有可能在不使用hibcore的情况下使用hib搜索特性来处理数据库的内容?
我想创建一个带有标准Hibernate搜索注解的Bean,并手动存储所有内容以用于测试(我不想创建Hibernate表以用于测试)。
对于一个要用@Indexed注解的类,我需要它是一个@实体,但是因为我没有为这个类指定我的数据库内容,所以我得到了一个错误。
我的问题是:
如何将Hibernate搜索仅用于Lucene管理?

irtuqstp

irtuqstp1#

我想问题是你的最终目标是什么?你想在生产中使用Hibernate搜索而不使用Hibernate ORM,还是你只是在寻找一些测试解决方案?
实际上,您可以独立使用Hibernate Search而不使用Hibernate ORM,但是,您必须实现多个SPI协定,这很麻烦,但也有可能。事实上,Infinispan Query(Infinispan -https://github.com/infinispan/infinispan/tree/master/query的查询功能)正是这样做的。它使用Hibernate Search引擎w/o ORM部分。搜索团队正在进行的工作是使不使用ORM的搜索更容易。请密切关注即将发布的版本。
如果您只是在寻找某种方法来测试Hibernate Search + ORM,那么您最好使用内存中的数据库,这是在这种情况下进行单元测试的最简单的方法。

p4tfgftt

p4tfgftt2#

最后,您的Hibernate需要知道数据库配置。当您注意到Hibernate日志时,Hibernate引擎将首先注册类型,第二步,它将查找Hibernate配置属性,并在接下来的步骤中进行解析和验证。我在这里的观点是,Hibernate必须已被告知数据库信息...顺便说一下,您还可以发布错误详细信息以获得进一步的帮助。
干杯!

7xllpg7q

7xllpg7q3#

如果其他方法都失败了,你可以使用in-memorydatabasesone,它们会在你运行测试后自毁。

q8l4jmvw

q8l4jmvw4#

这就是它的工作方式(如果您有一个数据库,但您不想将索引的内容存储到其中):
创建一个包含所有所需信息的虚拟实体类,并按如下方式操作(示例来自我的包含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搜索版本:
https://github.com/Hotware/Hibernate-Search-JPA/tree/master/hibernate-search-standalone

相关问题