如何在数据库中查询不仅与样本完全相似而且几乎相似的项目?几乎作为搜索引擎工作,但只适用于一个小项目,最好是在 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/