我有一个记录在一列的价值“非常好的宝马4轮驱动i5”。
如果我提供了一个这个值的子字符串,我怎么能做出一个能找到这个值的查询呢?假设我想通过提供这个“宝马i5”来找到它?
如果我使用LIKE方法,那么它需要按顺序输入单词。
@Query("SELECT p FROM Product p WHERE p.name LIKE CONCAT('%',:name,'%')")
字符串
我使用Sping Boot 和Spring DATA。数据库是postgres。
如果我用这个查询在Postgres上搜索字符串,我可以找到它,所以问题是如何用Spring DATA来做:
select name from product WHERE name similar TO '%((BMW) | (i5))%'
型
1条答案
按热度按时间i2byvkas1#
Using Postgres SIMILAR TO.
不要使用
SIMILAR TO
。完全没有意义。请参阅:使用正则表达式匹配运算符**
~
**(或者不区分大小写的变体~*
)可以更快地在字符串中的任何位置查找部分匹配。要以任意顺序匹配 two 字符串,请使用 two 表达式以保持简单。喜欢的:字符串
但我怀疑你想要在“BMW”之后的“i5”*(中间有一些或没有噪音):
型
或者:
型
这两种方法都可以用三元组索引来支持,如:
型
首先需要附加模块pg_trgm。请参阅:
或使用text search。然后,您可以传递一个包含多个单词(词素)的字符串。您的查询可能如下所示:
型
或者使用短语搜索查找 'BMW'后跟'i5':
型
请参阅:
文本搜索功能强大,但您可能必须先熟悉它。手册提供了你需要知道的一切。索引可能如下所示:
型
进一步阅读: