通过扩大匹配来改善搜索结果

时间:2012-06-27 10:09:17

标签: php string-matching

我正在尝试使用PHP改进搜索结果。例如当产品名称为ZSX-3185BC时,用户在放置ZSX3185BC之类的内容时无法找到该产品。到目前为止我得到的结果如下:

$input = '01.10-2010';  
$to_replace = array('.','-');
$clean = str_replace($to_replace, '/',$input);`

我试过这个,但它无法正常工作(不确定,发表在评论中没有详细说明)

$str = ""; 
$len = strlen($strSearch) - 1; 
// Loop through the search string to check each charecter is acceptable and strip those that are not 
for ($i = 0; $i <= $len; $i++) {
    if(preg_match("/\w|-| /",$strSearch[$i])) {
        $str = $str . $strSearch[$i]; 
    }
}

2 个答案:

答案 0 :(得分:0)

您应该尝试直接在数据库查询中进行此类模糊匹配。模糊字符串匹配的常用方法是Levenshtein distance

MySQL没有内置,但可以添加它。 See this SO question.

基本方法是向MySQL添加存储的函数。有Levenshtein implementation作为存储函数。

答案 1 :(得分:-1)

试试这个:

SELECT * FROM tablename WHERE replace(fieldname, '-', '') like '%ZSX3185BC%';