如何查询数据库中不相似但几乎匹配的项目
How can I go about querying a database for non-similar, but almost matching items
如何在数据库中查询不仅与样本完全相似而且几乎相似的项目?几乎作为搜索引擎工作,但只适用于小型项目,最好在 Java 中。例如:
String sample = "Sample";
我想在每次查询时检索以下所有内容 sample
:
String exactMatch = "Sample";
String nonExactMatch = "S amp le";
String nonExactMatch_2 = "ampls";
您可以在 myisam 全文索引列中使用 match_against。
您需要用您的数据库可以理解的术语来定义相似的含义。
一些可能性包括编辑距离,例如。
在您的示例中,示例 匹配...
..."Sample",如果您搜索时不区分大小写。
..."S amp le",如果您从查询字符串和目标字符串中删除一组忽略的字符(此处仅 space)。您可以将新值存储在数据库中:
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
...等等。
一种方法是问自己,我必须如何转换搜索值和搜索值,以便它们匹配?,然后继续并在代码中实现它。
如何在数据库中查询不仅与样本完全相似而且几乎相似的项目?几乎作为搜索引擎工作,但只适用于小型项目,最好在 Java 中。例如:
String sample = "Sample";
我想在每次查询时检索以下所有内容 sample
:
String exactMatch = "Sample";
String nonExactMatch = "S amp le";
String nonExactMatch_2 = "ampls";
您可以在 myisam 全文索引列中使用 match_against。
您需要用您的数据库可以理解的术语来定义相似的含义。
一些可能性包括编辑距离,例如。
在您的示例中,示例 匹配...
..."Sample",如果您搜索时不区分大小写。
..."S amp le",如果您从查询字符串和目标字符串中删除一组忽略的字符(此处仅 space)。您可以将新值存储在数据库中:
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
...等等。
一种方法是问自己,我必须如何转换搜索值和搜索值,以便它们匹配?,然后继续并在代码中实现它。