2010-03-03 1 views
1

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

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 ..)

+1

Если вы действительно планируете построить на этом больше, или использовать его в приложении высокого трафика, вы, вероятно, лучше заменить то, что у вас есть с чем-то вроде Луцен. В противном случае вы обречены самостоятельно восстанавливать функции Lucene. –

ответ

0

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

+0

Будет ли это примерно так: WHERE MATCH (имя, другое_имя, описание) ПРОТИВ (: string) И имя LIKE $ string%; – chupinette

+0

в SQL что-то вроде, WHERE key = 'Bi%', поэтому из примера вы должны добавить/скомпоновать '%' в $ string, как ... LIKE $ string. '%' ... – ultrajohn

+0

И имя LIKE . $ string. '%'; Im получение ошибки: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «%» в строке 6. Можете ли вы мне помочь? – chupinette

1

Вы можете использовать MySQL Fulltext-Search в булевом режиме. Это позволяет выполнять поиск типа «Би *». Вам нужно будет только добавить * к каждому принятому слову и немного изменить 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

см. [Ссылка] (http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html) для полнотекстовых поисковых функций. –