我正在使用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;
}
答案 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来加速这一切 - 两者都允许查找没有找到完全匹配的查询,但它会返回类似的结果。使用全文,案例无关紧要,您甚至可以找到同义词等。 如果您有兴趣,请告诉我,我会发布一些示例代码。