我如何修改网站上的搜索选项,以便键入错误的单词也能提供一些建议

时间:2019-07-07 15:08:53

标签: elasticsearch search

使用mysql“ like”函数进行当前搜索,并希望使用jaro-winkler对其进行修改。 什么是实现它的最佳方法。 php代码,js代码还是mysql函数?

要搜索的列包含大约100万行!

1 个答案:

答案 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是错误键入单词的最大可能正确单词。您可以使用此值进行剩余的操作。

注意:您也可以在浏览器上显示字符串,就像显示结果(正确的单词)一样,而不是键入错误的单词。