Mysql'Like'在Spring启动和hibernate中搜索

时间:2017-03-22 20:36:51

标签: mysql hibernate spring-boot

我在我的应用程序中创建了一个使用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”

的行

请帮帮我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以将Restriction.ilikeRestriction.or一起使用,并获得您想要的结果:

Criterion cond1= Restrictions.ilike("name","%"+searchText+"%");
Criterion cond2= Restrictions.ilike("description", "%"+searchText+"%");
criteria.add(Restrictions.or(cond1, cond2));