使用mysql“ like”函数进行当前搜索,并希望使用jaro-winkler对其进行修改。 什么是实现它的最佳方法。 php代码,js代码还是mysql函数?
要搜索的列包含大约100万行!
答案 0 :(得分:1)
jaro-winkler
函数比较两个字符串,并根据两个字符串之间的匹配返回浮点值(您可以更改返回类型)。如果两个字符串都相等,则返回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
是错误键入单词的最大可能正确单词。您可以使用此值进行剩余的操作。
注意:您也可以在浏览器上显示字符串,就像显示结果(正确的单词)一样,而不是键入错误的单词。