我在SpringBoot-Backend中使用HibernateSearch。这些测试在H2-Database上运行,我尝试使用集成测试来测试服务类。如果我用Postman测试控制器,一切正常(使用postgres-database),但是在下面的测试中,总是返回一个空列表。
@Transactional
public List<House> searchHouses(String searchString) {
FullTextEntityManager fullTextEntityManager
= Search.getFullTextEntityManager(entityManager);
QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder()
.forEntity(House.class)
.get();
Query descriptionQuery = queryBuilder
.keyword()
.onFields("description", "city", "name")
.matching(searchString)
.createQuery();
FullTextQuery jpaQuery
= fullTextEntityManager.createFullTextQuery(descriptionQuery, House.class);
return jpaQuery.getResultList();
}
@Test
@Transactional
@WithMockUser(value = DEFAULT_LOGIN)
public void searchHouse() throws Exception {
House house = houseRepository.createHouse();
assertThat(houseService.searchHouses("house1")).hasSize(1);
}
我已经阅读了这篇文章:How to test services that use Hibernate Search?,但没有帮助。该实体肯定存储在数据库中,因为以下检查有效:
assertThat(houseService.getAllHouses()).hasSize(1);
所以我不知道为什么HibernateSearch索引总是为空,也许我错过了一些配置?
在测试日志中,出现以下错误消息:
"ERROR","logger_name":"LuceneBackendQueueTask","message":"HSEARCH000072: Couldn't open the IndexWriter because of previous error: operation skipped, index ouf of sync!"