如何在PHP

时间:2017-01-21 11:08:08

标签: php search

我有3个不同的字符串列表。第一个包含人的名字(从10个字符到80个字符长)。第二个 - 房间号码(903,231等)。最后一组 - 组号(ABCD-1312,CXVZ-123)。

我有一个由用户提供的查询。首先,我尝试使用Levenshtein距离进行搜索,但它没有工作,因为每当用户键入3个字符时,它会给出一些房间号,即使查询中没有任何数字。然后,我尝试了similar_text(),它工作得更好,但因为人名都有不同的长度,所以它主要给出了名字较短的结果。

现在,我提出的最好的方法是使用similar_text()和str_pad()来使每个字符串的长度相等。仍然无法正常工作。

我想以某种方式为字符串赋予额外的权重,如果它们连续有几个匹配,或者查询和我的字符串以相同的字母开头等等。

$search_min_heap = new SearchMinHeap();

$query = strtolower($query);    // similar_text is case sensitive, so make everything lowercase
foreach ($res["result"] as &$item) {
    similar_text($query, str_pad(strtolower($item["name_en"]), 100, " "), $cur_distance_en);
    similar_text($query, str_pad(strtolower($item["name_ru"]), 100, " "), $cur_distance_ru);
    similar_text($query, str_pad(strtolower($item["name_kk"]), 100, " "), $cur_distance_kk);

    $cur_max_distance = max($cur_distance_en, $cur_distance_ru, $cur_distance_kk);
    $item["matching"] = $cur_max_distance;
    $search_min_heap->insert($item);
}

$first_elements = $search_min_heap->getFirstElements($count);

0 个答案:

没有答案