在Postgres中搜索多个字段

在Postgres中搜索多个字段

问题描述:

我正在使用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; 
} 

你可以简单地用多个字段

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

从长远来看比较搜索字符串,做的最好的事情是创建一个列(或者甚至另一个表)搜索条件。我个人喜欢使用tsvector数据类型进行全文搜索。

基本上你有一个触发器,它将所有的数据附加在一起并保存在tsvector字段(或者只是一个文本字段,但它更大)。触发器在更新或删除时重建此项。

你打电话场“搜索” ,你可以简单地做一个“地方搜索LIKE‘%长期%’”

可以加速这一切使用起来既全文搜索索引TXVECTOR或使用trigrams- - 两者都将允许查询找不到完全匹配,但会返回类似的结果。随着全文,案件并不重要,你甚至可以找到同义词,等等。 让我知道如果你有兴趣,我会张贴一些示例代码。