【发布时间】:2015-02-15 16:03:22
【问题描述】:
我正在尝试实现基于休眠搜索的搜索。 我设法根据某些条件组合搜索字段,但在这种情况下,我无法使用通配符进行搜索。
List<String> spalten = new ArrayList<String>();
FullTextEntityManager fullTextEntityManager = org.hibernate.search.jpa.Search
.getFullTextEntityManager(em);
QueryBuilder qb = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder().forEntity(BeitragVO.class).get();
List<BeitragVO> results;
// add fields for search
List<String> fields= new ArrayList<String>();
if (student) {
logger.info("hit student");
spalten.add("user.surname");
spalten.add("user.givenname");
}
if (company) {
logger.info("hit company");
spalten.add("company.name");
}
for (String string : fields) {
logger.info(string);
}
logger.info("Searchterm:" + searchterm);
org.apache.lucene.search.Query luceneQuery = qb.keyword()
.onFields(fields.toArray(new String[fields.size()]))
.matching(searchterm).createQuery();
logger.info("Query: " + luceneQuery.toString());
javax.persistence.Query jpaQuery = fullTextEntityManager
.createFullTextQuery(luceneQuery, ArticleVO.class);
results= jpaQuery.getResultList();
在我的搜索输入下,我有六个复选框,用户可以检查或不检查。 如果用户检查学生,则搜索仅适用于学生表。这完全没问题!
问题: 搜索输入:亚历山 (亚历山大)
没有找到结果!
我尝试过这样的通配符搜索:
TermContext tc = qb.keyword();
WildcardContext wcc = tc.wildcard();
if (student) {
TermMatchingContext tmc = wcc.onField("user.surname");
tmc = tmc.andField("user.givenname");
luceneQuery = tmc.matching(searchterm).createQuery();
}
这是正确的语法,我得到了正确的查询(user.surname:alexander user.givenname:alexander)。但仍然是一个空的结果列表。
我真的很喜欢没有通配符的尝试。有没有办法在这次尝试中添加通配符搜索?
【问题讨论】:
标签: hibernate wildcard hibernate-search