Улучшить мою поисковую систему - PullRequest
1 голос
/ 03 марта 2010

Я попытался реализовать простую поисковую систему для моего приложения. Вот что я сделал:

    CREATE FULLTEXT INDEX item_name_other_name_desc_index
    ON item (name,other_name,description)

public static function Search($string)
{   

    $delims = ',.; ';
        $word = strtok($string,$delims);
        while($word)
        {

           $result['accepted'][] = $word;                   
           $word = strtok($delims);

        }

          $string = implode(" ", $result['accepted']);

    $sql = 'SELECT item_id,name,other_name,description,price,discounted_price, thumbnail_photo,large_photo
    FROM item
    WHERE 
    MATCH(name,other_name,description)
    AGAINST(:string)' ;
    $parameters = array(':string' => $string);
    $result['items'] = DB::GetAll($sql,$parameters);
    return $result;
}

Это работает и ищет только слова. Может ли кто-нибудь предложить мне, как я могу улучшить его и как мне действовать, если я хочу искать строки, такие как «Bi», которые будут показывать мне результаты, начиная с этой строки (например, Bike ..)

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Вы можете использовать полнотекстовый поиск MySQL в логическом режиме. Это позволяет искать как «Bi *». Вам нужно только добавить * к каждому принятому слову и немного изменить SELECT.

SELECT item_id,name,other_name,description,price,
       discounted_price,thumbnail_photo,large_photo
FROM item
WHERE 
MATCH(name,other_name,description)
AGAINST(:string IN BOOLEAN MODE)

где: строка заполнена 'Bi *'

0 голосов
/ 03 марта 2010

вы можете использовать подстановочные знаки, такие как '%' и '_' ... для вашего примера, наличие ключа поиска, такого как Bi%, будет включать Bike и любые другие слова, которые начинаются с 'Bi' в наборе результатов .... и так далее ...

...