2014-11-25 76 views
0

我正在使用Hibernate作爲ORM和PostgreSQL作爲數據庫的Spring-MVC項目。在該項目中,我想搜索數據庫中的某些產品。你可以猜到,產品有很多參數,比如productName,productDescription,productTags等。 問題:我在HQL中尋找一個搜索函數,最好在搜索所有字段並返回productList的地方。我有一個simmple搜索功能,如下所述。在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

簡單,謝謝。這有助於。 :-)我只需要setParameter一次嗎? – 2014-11-25 15:06:48

+0

@Akshay是的,只有一次。 – 2014-11-25 15:08:18

+0

你能否告訴我如何獲得前50個結果? – 2014-11-25 15:09:57

0

從長遠來看比較搜索字符串,做的最好的事情是創建一個列(或者甚至另一個表)搜索條件。我個人喜歡使用tsvector數據類型進行全文搜索。

基本上你有一個觸發器,它將所有的數據附加在一起並保存在tsvector字段(或者只是一個文本字段,但它更大)。觸發器在更新或刪除時重建此項。

你打電話場「搜索」 ,你可以簡單地做一個「地方搜索LIKE‘%長期%’」

可以加速這一切使用起來既全文搜索索引TXVECTOR或使用trigrams- - 兩者都將允許查詢找不到完全匹配,但會返回類似的結果。隨着全文,案件並不重要,你甚至可以找到同義詞,等等。 讓我知道如果你有興趣,我會張貼一些示例代碼。