Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Движок поиска для самописного сайта


Автор: artlayers 10.8.2011, 10:23
Есть самописный движок, необходимо организовать поиск по БД (mysql), по двум полям - русское название и название на английском языке. При всем этом вариант типа
Код

SELECT * FROM name WHERE 
 en_title  LIKE %что-то% 
 OR  ru_title LIKE %что-то%

совсем не подходит. Нужен поиск умнее, который может учитывать частичные совпадения и ранжировать соответственно результаты. Например, неграмотный пользователь пишет запрос: "велосепед" такого слова в БД нет, соответственно при поиске влоб пользователь получит ответ, что ничего не найдено. Но слово "велосипед" в БД есть и даже при неправильном запросе, но близком к этому слову пользователь должен получить релевантный результат. Кроме того, необходимо учитывать разные словоформы одного слова. Подскажите готовые решения или пути. Спасибо.

Автор: Wolf1994 11.8.2011, 06:37
Цитата(artlayers @  10.8.2011,  10:23 Найти цитируемый пост)
Кроме того, необходимо учитывать разные словоформы одного слова. 

Будет работать, если удалить все возможные окончания слова.

Цитата(artlayers @  10.8.2011,  10:23 Найти цитируемый пост)
ранжировать соответственно результаты

Быстрее и качественнее сделать ранжирование скриптом: можно использовать сложные алгоритмы, нагрузка же при обработке небольшого количества данных (до 50 строк больше, чем достаточно для хорошего поиска) будет минимальной.

Цитата(artlayers @  10.8.2011,  10:23 Найти цитируемый пост)
Нужен поиск умнее, который может учитывать частичные совпадения

Можно создать дополнительное поле в БД, которое будет содержать слово только из согласных букв. При выборке также указывать такое слово - почти все ошибки (обычно в гласных) не будут оказывать влияния на поиск.

Автор: jsa 11.8.2011, 07:20
artlayers, посмотри на http://sphinxsearch.com/

Автор: makklovskiy 19.8.2011, 17:33
для того чтобы поиск был умнее надо будет забивать в базу словари и сравнивать у кредитора к примеру есть опция проверить на орфографию, и маленький совет, пользуйся функцией msql_real_escape_string();

Автор: Absinthe 19.8.2011, 22:52
makklovskiy, ты вообще читаешь то, что комментируешь?

Автор: MuToGeN 29.8.2011, 16:08
Помню, когда-то http://www.mnogosearch.org/ пользовал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)