Hibernate Search - Как вывести список всех записей по умолчанию
Я использую поиск Hibernate.
У меня есть текстовое поле поиска на моей странице JSP. Если я введу какой-то текст, он вернет правильный результат. Но если я оставлю пустое сообщение и нажму кнопку поиска, он не вернет никаких записей.
Код:
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
String searchQuery = "Admin";
String[] userFields = {"firstName", "lastName", "role_groupName", "userId"};
QueryParser parser = new MultiFieldQueryParser(userFields, new StandardAnalyzer());
org.apache.lucene.search.Query luceneQuery;
try
{
luceneQuery = parser.parse(searchQuery);
}
catch (ParseException e)
{
throw new RuntimeException("Unable to parse query: " + searchQuery, e);
}
FullTextSession ftSession = Search.getFullTextSession(session);
org.hibernate.Query query = ftSession.createFullTextQuery(luceneQuery, UserVO.class);
List results = query.list();
System.out.println("Result size:" + results.size());
2 ответа
Решение
Я просто поставил "*", если текстовое поле поиска пустое. Так что он возвращает все записи. Теперь это работает нормально для меня. Это мой код
try
{
if(searchText == null || searchText.trim().length()==0)
{
searchText = "*";
}
luceneQuery = parser.parse(searchText);
}
catch (ParseException e)
{
throw new RuntimeException("Unable to parse query: " + searchText, e);
}
AllContext org.hibernate.search.query.dsl.QueryBuilder.all()
Запрос, соответствующий всем документам (обычно смешанный с логическим запросом).
Это метод, который вам нужно использовать
Вот пример кода для вашей проблемы
@Test
public void testSearchUsingQueryBuilder() {
FullTextSession fullTextSession = org.hibernate.search.Search
.getFullTextSession(sessionFactory.getCurrentSession());
QueryBuilder builder = fullTextSession.getSearchFactory()
.buildQueryBuilder().forEntity(Country.class).get();
org.apache.lucene.search.Query query = builder.all().createQuery();
FullTextQuery jpaQuery = fullTextSession.createFullTextQuery(query,
Country.class);
System.out.println("Before HQL =" + startDate);
List<Country> tempCountry = jpaQuery.list();
}