2012-01-27 5 views
-1

Я новичок в php и mysql. В моем проекте мне нужно разработать поисковую систему для нескольких ключевых слов по нескольким столбцам, а также потребовать ранжирование и релевантность ключевых слов.php поисковая система ключевые слова рейтинг

Например, если у меня есть три слова привет, привет, эй и хочу искать по полям, например, тему, сообщение, ссылку, текст. в этом случае строка, у которой больше ранжирования ключевых слов, будет первой, а младшая строка рейтинга будет последней. кто-нибудь подскажет мне, как реализовать такую ​​поисковую систему. моя база данных составляет около 4 миллионов и быстро растет.

ответ

1

Использование полнотекстового поиска:

<?PHP 

    //SET THE SEARCH TERM 
    $term = "Search Term"; 


    $sql = "SELECT *, MATCH(subject, message,reference,textbody) AGAINST('". $term ."') as score FROM pages WHERE MATCH (subject, message,reference,textbody) AGAINST('". $term ."') ORDER BY score DESC"; 
    $query = mysql_query($sql); 

    //BUILD A LIST OF THE RESULTS 
    while($result = mysql_fetch_assoc($query)) { 
     // your stuff for showing result 
    } 

?> 

Примечание: Вы должны иметь FULLTEXT индексации на столбцах темы, сообщения, ссылки, TextBody

+0

спасибо за ответ. некоторые запросы: полнотекстовая работа в движке базы данных innodb? в то время как использование совпадения ... Против я получаю результат, имеющий все слова сначала, любые два на секунду и любой в третьем порядке? пожалуйста, покажите несколько полезных примеров, которые лучше всего соответствуют вашей практике. еще раз спасибо. – Prabhu

+0

У меня возникла ошибка при запросе на БД: ** Тип используемой таблицы не поддерживает индексы FULLTEXT ** – Prabhu

+0

, так как я даю примечание в конце (у вас должно быть индексирование FULLTEXT для столбца subject, message, reference, textbody) Применить полный текст index ion эти colums как этот запрос: ALTER TABLE tablename ADD FULLTEXT (тема, сообщение, ссылка, текстовое тело) –

0

Вы можете использовать AND или OR операторов, как ключевое слово, в зависимости на то, что вы хотите, чтобы поиск возвращался.

SELECT * FROM table WHERE subject LIKE %$param1% AND another_col LIKE %$param2% .......; 

ИЛИ

SELECT * FROM table WHERE subject LIKE %$param1% OR another_col LIKE %$param2% .......; 
+0

, но в этом случае я не могу изменить тип двигателя DB innodb для myism. поэтому я не могу использовать функцию полнотекстового поиска. любая альтернатива для ранжирования ключевых слов? я хочу что-то лучше, чем http://r937.com/keyword_relevance.html – Prabhu