mysql - 如何查询数据库中不相似但几乎匹配的项目

标签 mysql database algorithm matching

如何在数据库中查询不仅与样本完全相似而且几乎相似的项目?几乎作为搜索引擎工作,但只适用于一个小项目,最好是在 Java 中。例如:

String sample = "Sample";

每当我查询 sample 时,我想检索以下所有内容:

String exactMatch = "Sample";
String nonExactMatch = "S   amp   le";
String nonExactMatch_2 = "ampls";

最佳答案

您需要用您的数据库可以理解的术语来定义similar 的含义。

一些可能性包括 Levenshtein 距离,例如。

在您的示例中,示例 匹配...

...“示例”,如果您在不区分大小写的情况下进行搜索。

..."S amp le",如果您从查询字符串和目标字符串中删除了一组被忽略的字符(这里只有空格)。您可以将新值存储在数据库中:

   ActualValue      SearchFor
   John Q. Smith    johnqsmith%

当有人搜索“John Q. Smith, Esq”时。你可以把它归结为 johnqsmithesq 并运行

   WHERE 'johnqsmithesq' LIKE SearchFor

“ampls”更棘手。为什么“ampls”与“sample”相匹配?一个共同的子串?一些共享的字母?他们的订单是否有效(即字谜是否有效)?可以采用多种方法,但必须由您来决定。您可以使用 Levenshtein 距离,或者存储一个字符串,例如“100020010003...”,其中每个数字编码您拥有的字母数,最多 9 个(因此 3 个 C 和 2 个 B,但没有 A 会给出“023 ... ") 然后运行此综合症与数据库中每个术语的综合症之间的 Levenshtein 距离:

 ActualValue    Search1     Rhymes  abcdefghij_Contains  anagramOf
 John Q. Smith  johnqsmith% ith     0000000211011...     hhijmnoqst

...等等。

一种方法是问自己,我必须如何转换搜索值和搜索值,以便它们匹配?,然后继续并在代码中实现它。

关于mysql - 如何查询数据库中不相似但几乎匹配的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31581357/

相关文章:

sql - 使用 UNION 的自定义结果顺序 - SQL

algorithm - 平衡二叉搜索树中特定级别的节点数是多少?

mysql - 如何使用 Mysql 获取总计 "active"个用户?

Android Mediastore 和外部数据库

node.js - 如何在 MongoDB find() 中显示建议

c++ - Bitmask - SPOJ LINEUP 错误答案

string - UVa_11151(最长回文)

php - MySQL 简单查询返回零行

mysql - 搜索带有特殊字符和 '*'的MySQL FT索引时出错

c# - 如何将数据从 .NET 持久保存到磁盘?