2014-11-25 4 views
0

Я работаю над проектом Spring-MVC, используя Hibernate как ORM и PostgreSQL в качестве базы данных. В проекте я хотел бы найти некоторые продукты в базе данных. Как вы можете догадаться, в продуктах есть немало параметров, таких как productName, productDescription, productTags и т. Д. Вопрос: Я ищу функцию поиска в HQL, желательно, где все поля просматриваются и возвращается productList. У меня есть простая функция поиска, как указано ниже.Поиск в Postgres в нескольких полях

Функция поиска:

public List<ProductBasic> listProduct(Productname) { 

    if(session == null){ 
     session = this.sessionFactory.openSession(); 
    } else{ 
     session = this.sessionFactory.getCurrentSession(); 
    } 
    Query query = session.createQuery("from ProductBasic as p where p.productName=:productName order by p.ordernumber"); 
    query.setParameter("productName",productName); 
    List<ProductBasic> productBasicList= query.list(); 
    return productBasicList; 
} 

ответ

1

Вы можете просто сравнить строку поиска с несколькими полями

Query query = session.createQuery("from ProductBasic as p where p.productName=:searchString or p.productDescription = :searchString order by p.ordernumber"); 
+0

Простой, спасибо. Это помогает. :-) Должен ли я устанавливать параметр только один раз? –

+0

@Akshay Да, только один раз. –

+0

Можете ли вы сообщить, как получить только первые 50 результатов? –

0

В конечном счете, самое лучшее, что нужно сделать, это создать столбец (или, возможно, даже другая таблица) для поисковых запросов. Мне лично нравится полнотекстовый поиск с использованием типа данных tsvector.

В принципе у вас есть триггер, который объединяет все ваши данные и сохраняет его в поле tsvector (или просто текстовое поле, но оно больше). Триггер восстанавливает это при обновлении или удалении.

вы называете поле «поиск» и вы можете просто сделать «где поиск, как„термин%%“»

вы можете ускорить все это с использованием либо полнотекстового поиска и индексов txvector, или с помощью trigrams- - оба из которых также позволят запросы, где точное совпадение не найдено, но оно вернет аналогичные результаты. С полным текстом дело не имеет значения, и вы даже можете найти синонимы и т. Д. Сообщите мне, если вы заинтересованы, и я отправлю код примера.

Смежные вопросы