在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");
答
从长远来看比较搜索字符串,做的最好的事情是创建一个列(或者甚至另一个表)搜索条件。我个人喜欢使用tsvector数据类型进行全文搜索。
基本上你有一个触发器,它将所有的数据附加在一起并保存在tsvector字段(或者只是一个文本字段,但它更大)。触发器在更新或删除时重建此项。
你打电话场“搜索” ,你可以简单地做一个“地方搜索LIKE‘%长期%’”
可以加速这一切使用起来既全文搜索索引TXVECTOR或使用trigrams- - 两者都将允许查询找不到完全匹配,但会返回类似的结果。随着全文,案件并不重要,你甚至可以找到同义词,等等。 让我知道如果你有兴趣,我会张贴一些示例代码。
简单,谢谢。这有助于。 :-)我只需要setParameter一次吗? – 2014-11-25 15:06:48
@Akshay是的,只有一次。 – 2014-11-25 15:08:18
你能否告诉我如何获得前50个结果? – 2014-11-25 15:09:57