我在我的应用程序中创建了一个使用Spring boot + Hibernate的搜索功能。数据库是MySQL。 我需要在我的实体中的几个字段上执行数据搜索。我也希望进行部分数据匹配,基本上就是MySQL'LIKE'所做的。
例如:......
WHERE name LIKE '%searchText%' OR description LIKE '%searchText%'.
我知道我可以使用@Query或findByNameContaining。但随着数据的增加,这将不会得到很好的优化。
我以此为例进行搜索:
http://blog.netgloo.com/2014/11/23/spring-boot-and-hibernate-search-integration/
对于完整数据匹配,这对我来说很好。但我无法弄清楚如何利用它来进行部分数据匹配。
编辑:添加示例数据和更多说明
示例:如果我有以下行:
id | name | description | type
1 | sample | this is a sample description | Y
2 | samples | this is a description for samples | Y
3 | not a match | this should not match | Y
4 | not a match | this should also not match | Y
结果:
1 | sample | this is a sample description | Y
2 | samples | this is a description for samples | Y
因此,当我搜索样本时,它应匹配'sample'和'samples'上的前两行,如果它在名称或描述中找到'sample'子字符串,则应该匹配更多行。
另外,我想在search子句中添加更多字段。示例:仅搜索“type”为“Y”
的行请帮帮我。
提前致谢。
答案 0 :(得分:0)
您可以将Restriction.ilike
与Restriction.or
一起使用,并获得您想要的结果:
Criterion cond1= Restrictions.ilike("name","%"+searchText+"%");
Criterion cond2= Restrictions.ilike("description", "%"+searchText+"%");
criteria.add(Restrictions.or(cond1, cond2));