如何查询数据库中不仅与样本完全相似的项目,还有那些几乎相似的项目?几乎与搜索引擎一样,但仅适用于小型项目,最好是Java。例如:
String sample = "Sample";
每当我查询sample
时,我都想检索以下所有内容:
String exactMatch = "Sample";
String nonExactMatch = "S amp le";
String nonExactMatch_2 = "ampls";
答案 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。