2015-11-24 3 views
0

Я пытаюсь выбрать людей из базы данных по имени и фамилии. Пользователь может набирать имя или фамилию или оба в одном поле ввода. Например. если пользователь вводит «Joh Smit», он должен вернуть Джона Смита, но пользователь может также набрать только «Joh» или «Smi», чтобы получить этого человекаHibernate подстановочный запрос на двух столбцах

Как создать запрос для обработки подстановочных знаков и всех слов из пользовательского ввода? Мой реальный код выглядит следующим образом:

String queryFilter = ""; 
for(String part : filter.split(" ")){ 
    queryFilter+=part.toLowerCase()+"* "; 
} 
queryFilter = queryFilter.trim(); 

query = queryBuilder.keyword().wildcard().onField("firstname").andField("lastname").matching(queryFilter).createQuery(); 

Это не может обрабатывать несколько слов из пользовательского ввода, из-за .wildcard(), но когда я удалить .wildcard() я не буду иметь возможность искать не точные названия.

+0

Вы можете сделать это с помощью критериев гибернации. –

ответ

0

Вы хотите построить логический запрос, где одна часть нацелена на первое имя, а другое - на имя последнего. Что-то вроде этого:

Запрос luceneQuery = QueryBuilder .bool() .Should() .Should() .createQuery();

См. Также интерактивные документы Hibernate для поиска - http://docs.jboss.org/hibernate/stable/search/reference/en-US/html_single/#search-query-querydsl - в частности раздел «Объединение запросов».