PHP в деталях



         

Поиск в MySQL. Релевантность своими руками - часть 2


Не очень-то сложно. Для надёжности и защиты от флуда можно ограничить количество слов в запросе.

Некоторые дополнения к прежним публикациям.

Общее количество найденных строк в таблице. Для вывода результатов поиска, разумеется, надо пользоваться оператором LIMIT (чтобы не писать каждый раз формирование этого параметра, пользуйтесь ). Если никаких операций группировки в запросе не делается, лучше подсчитать количество строк сразу в запросе ? COUNT(*), а не через функцию php mysql_num_rows(). Можете проверить на больших таблицах. Если производятся групповые операции, делаем запрос с COUNT(DISTINCT()), но без GROUP BY.

Подсветка. Если в текстах не бывает html-тегов, жить проще.

$text = preg_replace("/word1|word2|word3/i", "<b>\\0</b>", $text);

Если в тексте теги используются, то есть три варианта а) не делать подсветку б) поскольку теги пользователь не видит (разве что очень любопытный пользователь), то можно сделать поле индекса, в котором не будет тегов а символы [^\w\x7F-\xFF\s] будут заменены на пробелы (именно эти символы вырезаются из поисковой строки в самом начале, так что поиск по ним не производится). Поиск и подсветку в таком случае сделать именно по индексу. в) делать подсветку текста из обычного поля, предварительно вырезав теги функцией [].

Полная версия поискового кода, как всегда, в списке файлов.




Содержание  Назад  Вперед