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

时间:2015-07-23 07:56:55

标签: mysql database algorithm matching

如何查询数据库中不仅与样本完全相似的项目,还有那些几乎相似的项目?几乎与搜索引擎一样,但仅适用于小型项目,最好是Java。例如:

String sample = "Sample";

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

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

2 个答案:

答案 0 :(得分:1)

您需要根据数据库可以理解的术语定义类似的含义。

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

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

..."示例",如果搜索时不区分大小写。

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

   ActualValue      SearchFor
   John Q. Smith    johnqsmith%

当有人搜索" John Q. Smith,Esq。"你可以把它煮到johnqsmithesq并运行

   WHERE 'johnqsmithesq' LIKE SearchFor

" ampls"更棘手。为什么它会放大'匹配'样本'?一个常见的子串?一些共享信件?他们的订单是否有效(即字谜有效)?许多方法都是可能的,但是您必须决定的。您可以使用Levenshtein距离,也可以存储一个字符串,如" 100020010003 ..."每个数字对你拥有的字母数量进行编码,最多9个(所以3 C和2 B'但没有A' s会给#34; 023 ......" )然后运行该综合征与DB中每个术语的距离之间的Levenshtein距离:

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

......等等。

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

答案 1 :(得分:0)

您可以在myisam全文索引列中使用match_against。