使用mysql" like"功能进行当前搜索,并希望使用Jaro-Winkler对其进行修改。实施它的最佳方法是什么。PHP代码,JS代码或MySQL函数?
要搜索的列包含约1m行!
jaro-winkler
函数比较两个字符串,并根据两个字符串之间的匹配(您可以更改返回类型(返回float值。如果两个字符串等于1,则1个小于1个值。
因此,利用jaro-winkler
并将错误单词与您的有效值进行比较。
您需要在某个表中存储所有有效值(用于使用类似表达式的搜索(。
SELECT t.colname AS name,MAX(jaro_winkler_similarity('$mistypeword',t.colname )) AS jvalue FROM tablename AS t;
此查询为错误的单词提供了最大可能的正确值。
正如您说的那样,您有100万行,上面的查询可能会花费大量时间来给您回复。
因此,请从查询中获取值,然后您的php找到最大可能的有效值。
$sql = "SELECT t.colname AS name,jaro_winkler_similarity('$mistypeword',t.colname ) AS jvalue FROM tablename AS t";
$resultset = mysqli_query($conn, $sql) or die("database error:". mysqli_error($conn));
$value = 0;
while( $rows = mysqli_fetch_assoc($resultset) ) {
$new_val = $rows['jvalue'];
if($value < $new_val ){
$value = $new_val;
$search_name = $rows['name'];
}
}
$search_name
是错误的词最大可能的正确词。您可以使用此值来执行您剩余的操作。
注意:您还可以在浏览器上显示一个字符串,例如显示结果(正确的单词(而不是错误的单词。