是否可以使用hibernate搜索功能而不使用hibernate核心作为数据库的东西?
我想创建一个带有标准Hibernate-Search注释的Bean,并手动存储所有内容以进行测试(我不想创建用于测试的Hibernate表)。
对于要使用@Indexed注释的类,我需要它是一个@Entity,但是因为我没有为这个类指定数据库内容而得到错误。
我的问题是:
如何仅将Hibernate Search用于Lucene管理?
答案 0 :(得分:1)
最终你的hibernate需要知道数据库配置。当你注意到hibernate日志时,Hibernate引擎将首先注册类型,第二步它会查找hibernate配置属性,它将在后续步骤中进行解析和验证。我的这里指的是hibernate必须通知数据库信息...顺便说一句,你也可以发布你的错误细节以获得进一步的帮助..
Cheeers!
答案 1 :(得分:1)
答案 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