Опитвам се да внедря търсене, базирано на хибернация-търсене. Успях да комбинирам полета за търсене въз основа на някакво условие, но в този случай не мога да търся със заместващи знаци.
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.familia:alexander user.givenname: alexander). Но все още празен списък с резултати.
Много ми харесва опита без заместващи знаци. Има ли начин да добавите търсене със заместващ знак при този опит?