首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java / MySQL中实现模糊字符串搜索?

如何在Java / MySQL中实现模糊字符串搜索?
EN

Stack Overflow用户
提问于 2012-10-23 05:32:39
回答 2查看 3.7K关注 0票数 1

我正在使用REST框架在Java中开发webservice。

我使用MySQL 5.1数据库作为后端。

我正在我的一个表上执行搜索操作,比如使用(类似于模式)停止

但是现在我想为上面的搜索执行"Approximate_string_matching (模糊字符串搜索)“。例如,对于23 ST停止,用户可以提供搜索字符串23站、23站、23站、23 ST等。

对于这个Approximate_string_matching算法,我找到了链接匹配

但我不知道如何实现它。

请大家帮助我在Approximate_string_matching / MySQL中实现算法

提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-23 05:46:13

您可能需要研究的一件事是Levenshtein距离算法

Levenshtein距离是测量两个序列差异的字符串度量。

Apache有一个现成的实现。您可以使用getLevenshteinDistance(CharSequence s,CharSequence t,int阈值)获取与给定字符串大致相等的字符串。阈值会派上用场,这样您就可以丢弃离源词一定距离的单词,从而避免不必要的计算。

一种更好的方法是使用Levenshtein函数本身提供的MySQL。关于如何执行的一个简单示例可以看到这里

票数 5
EN

Stack Overflow用户

发布于 2012-10-23 06:24:29

根据您的解释,当任何用户将搜索字符串作为第23站、第23站、第23站或第23 ST提供时,过滤后的输出应该是"23 ST停止“,对吗?

因此,我假设您的所有站点名称都将类似于XX YY停站,其中XX是一个数值,YY是ST、VT、MT等站点的短格式。

如果这是正确的,那么您可以通过执行多个过滤器来实现这一点,这样就可以将第一个过滤器的输出输入到下一个过滤器。但在此之前,你需要弄清楚“该过滤什么”?

因此,在这种特殊情况下,"23“似乎是查询字符串开始时必须显示的子字符串,因此您需要从查询字符串中提取数字部分(可以使用Java regex),将结果作为第一个筛选器应用,因此在本例中将是:

代码语言:javascript
复制
 where stops like '23%'

然后,在输出此结果时,您可以应用下一个过滤器,在这种情况下,下一个过滤器可以是下一个单词的前两个字母(如果存在的话),并将其小写应用于一致性,因此在这种情况下,它将是'st':

代码语言:javascript
复制
 where LOWER(stops) like '%st%'

现在,您可以通过在同一个查询中应用两个过滤器(尝试使用子查询)在查询部件本身中实现这一点,或者可以引入第一个过滤器的结果集,并使用Java regex在结果集中应用剩余的筛选器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13024123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档