在Postgres中搜索多个字段

时间:2014-11-25 15:01:19

标签: hibernate postgresql

我正在使用Hibernate作为ORM和PostgreSQL作为数据库的Spring-MVC项目。在项目中,我想搜索数据库中的某些产品。您可以猜测,产品有很多参数,如productName,productDescription,productTags等。 问题:我正在寻找HQL中的搜索功能,最好搜索所有字段并返回productList。我有一个简单的搜索功能,如下所述。

搜索功能:

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;
}

2 个答案:

答案 0 :(得分:1)

您只需将搜索字符串与多个字段进行比较

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

答案 1 :(得分:0)

从长远来看,最好的办法是为搜索字词创建一个列(或者甚至是另一个表)。我个人喜欢使用tsvector数据类型进行全文搜索..

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

你称你的字段为“搜索” 你可以简单地做一个“搜索'%term%'”

你可以使用全文搜索txvector索引或使用trigrams来加速这一切 - 两者都允许查找没有找到完全匹配的查询,但它会返回类似的结果。使用全文,案例无关紧要,您甚至可以找到同义词等。 如果您有兴趣,请告诉我,我会发布一些示例代码。