| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Для профи > алгоритм поиска по БД |
| Автор: AlexxO 8.8.2005, 23:57 | ||
| Думаю вот сделать нормальный поисковик для сайта, который бы искал не просто по совпадению запроса, а исчо и отдельные слова учитывал (если в запросе более одного слова). Вот как я представляю всю поисковую систему: Имеется индексатор, который обрабатывает все страницы сайта, убирает при помощи stripslashes все тэги, заменяет где нужно лишние пробелы, табуляцию и т. д. вобщем всё неконтентное убирается... Затем из всего этого выделяются отдельные слова с параметром, обозначающим текущее положение слова в документе (порядковый номер слова или байт с которого начинается первый его символ), это слово складывается в таблицу примерно с такой структурой:
При поиске по двум и более словам мы простым запросом выбираем ряд с каждым словом по отдельности и смотрим на значения параметра position, чем меньше он отличаетя, тем выше выводим этот результат поиска и т. д. Конечно структура таблицы не годится ввиду того что одно слово может быть на нескольких страницах (да и встречаться несколько раз на одной странице) и было бы грамотно ещо одну таблицу завести в которой хранить урлы, но это не столь важно, главное сама идея... =) Выскажите плиз свою точку зрения по такому алгоритму поиска -- ИМХО скорость и эфективность его работы достаточно высока... Что думаете об этом? |
| Автор: Song 9.8.2005, 09:02 |
| Надо две таблицы: Таблица 1: word_id word Таблица 2: url word_id position |
| Автор: Master 17.8.2005, 10:03 |
| stripslashes убирает экранирование символов, а теги убирает strip_tags а теперь по теме... в поиске имхо не столь важна позиция слова, сколько частота его повторения на странице... это первое. второе - не столь важно количество совпавших слов сколь важна связка фразы искомой в поиске и если мы будем загонять весь контент на страницу и составлять запрос типа: разбиваем строку поиска на слова и ищем лайком через ор не только отдельные слова, но и группы слов, это и проще, и быстрее и качественнее. |
| Автор: Akina 17.8.2005, 12:54 |
| Имхо просто делаем полнотекстовый индекс и не изобретаем велосипед |
| Автор: Song 19.8.2005, 09:22 |
| Akina ты не прав. Полнотекстовый индекс имеет много ограничений. Ну хотя бы невозможность поиска по части слова. |