Shadow
Guest
Помогите с написанием поискового скрипта
Господа, помогите с созданием поискового скрипта. Постараюсь поточнее изложить проблему.
Итак, я делаю поиск по сайту на php. Поиск будет осуществляться по статьям и страницам электронных учебников. Все эти данные хранятся в таблицах MySQL.
Готовые скрипты мне не нужны, а нужна идея решения сложившейся задачи.
Воспользоваться возможностями полнотекстового поиска я не могу, т.к. в БД хранятся не тексты статей, а их html-коды, а при использовании полнотекстового поиска в результаты могут попасть страницы, содержащие ключевое слово в коде html, а не в самой статье, что не приемлемо, кроме того, полнотекстовый поиск не очень хорошо работает с русскоязычными материалами. Учитывая вышесказанное я осуществляю поиск с применением регулярных выражений.
Раньше скрипт работал так: из БД извлекались все записи подходящие под запрос, дальше подсчитывалась релевантность каждой записи. Я воспользовался очень простым механизмом - подсчитывалось количество вхождений слов запроса в текст документа. В соответствии с этим признаком документы сортировались по убыванию релевантности и выводились все результаты поиска на одну страницу. Все это делалось средствами php.
Теперь я хочу сделать, чтобы выводилось, скажем, 20 записей на страницу. Казалось бы, вставляем в запрос LIMIT - и дело в шляпе, но вот как сделать чтобы записи, извлекаемые из MySQL, сортировались в порядке убыли релевантности? Я излазил весь мануал по MySQL, но функции, аналогичной str_count() из php, не нашел. Попробовал воспользоваться системой определения релевантности при полнотекстовом поиске: MATCH(`text`) AGAINST('test'), но меня это не устраивает, потому что, например, MATCH(`text`) AGAINST('php') всегда равно 0, т. к. слово php слишком короткое, а на сайте у меня целый раздел по php и, естественно, записи из него должны занять первые места.
Подытожим все вышесказанное. Мне нужно сделать так, что бы релевантность записей определялась средствами MySQL при их выборки из БД. Как это сделать? Или может кто-то предложит какой-либо другой алгоритм поиска. Повторюсь, готовых скриптов мне не нужно, нужна только идея.
Господа, помогите с созданием поискового скрипта. Постараюсь поточнее изложить проблему.
Итак, я делаю поиск по сайту на php. Поиск будет осуществляться по статьям и страницам электронных учебников. Все эти данные хранятся в таблицах MySQL.
Готовые скрипты мне не нужны, а нужна идея решения сложившейся задачи.
Воспользоваться возможностями полнотекстового поиска я не могу, т.к. в БД хранятся не тексты статей, а их html-коды, а при использовании полнотекстового поиска в результаты могут попасть страницы, содержащие ключевое слово в коде html, а не в самой статье, что не приемлемо, кроме того, полнотекстовый поиск не очень хорошо работает с русскоязычными материалами. Учитывая вышесказанное я осуществляю поиск с применением регулярных выражений.
Раньше скрипт работал так: из БД извлекались все записи подходящие под запрос, дальше подсчитывалась релевантность каждой записи. Я воспользовался очень простым механизмом - подсчитывалось количество вхождений слов запроса в текст документа. В соответствии с этим признаком документы сортировались по убыванию релевантности и выводились все результаты поиска на одну страницу. Все это делалось средствами php.
Теперь я хочу сделать, чтобы выводилось, скажем, 20 записей на страницу. Казалось бы, вставляем в запрос LIMIT - и дело в шляпе, но вот как сделать чтобы записи, извлекаемые из MySQL, сортировались в порядке убыли релевантности? Я излазил весь мануал по MySQL, но функции, аналогичной str_count() из php, не нашел. Попробовал воспользоваться системой определения релевантности при полнотекстовом поиске: MATCH(`text`) AGAINST('test'), но меня это не устраивает, потому что, например, MATCH(`text`) AGAINST('php') всегда равно 0, т. к. слово php слишком короткое, а на сайте у меня целый раздел по php и, естественно, записи из него должны занять первые места.
Подытожим все вышесказанное. Мне нужно сделать так, что бы релевантность записей определялась средствами MySQL при их выборки из БД. Как это сделать? Или может кто-то предложит какой-либо другой алгоритм поиска. Повторюсь, готовых скриптов мне не нужно, нужна только идея.