Поиск на сайте - релевантность

EO
На сайте с 10.05.2005
Offline
114
506

Здравствуйте!

Есть поиск по каталогу программу, я до конца в FullText поиске не разбираюсь...

Интересует, вот что, поиск вроде ищет по релевантности, но хотелось бы, чтобы он мог находить фразы, которые отличаются от искомой на 1-2 буквы, например: есть программа Шареман, но люди ее ищут и по фразам: шараман, шериман и т.п.

Сейчас это организовано в виде синонимов - вручную прописывается к каждой программе, все синонимы (поле names).

Но было бы хорошо при поиске также выдавать менее релевантные результаты, в конце, которые отличаются на 1-2 буквы.

Вот запрос, на котором работает поиск сейчас (не пинайте, если он не совсем правильный, его писал один программер, потом другой доделывал и еще что-то я добавлял, но в общем все работает, вроде :)):

$sql = 'SELECT SQL_CALC_FOUND_ROWS '.
...здесь перечисление полей...
"MATCH (name) AGAINST ('$wordsToMatch') + ".
"MATCH (name) AGAINST ('$wordsToMatch' IN BOOLEAN MODE) * 100 + ".
"MATCH (names) AGAINST ('$wordsToMatch' IN BOOLEAN MODE) + ".
"MATCH (kwrds) AGAINST ('$wordsToMatch' IN BOOLEAN MODE) + ".
"MATCH (url2t, url3t, url4t, url5t) AGAINST ('$wordsToMatch' IN BOOLEAN MODE) + ".
"MATCH (desc_small,description) AGAINST ('$wordsToMatch' IN BOOLEAN MODE) as rel ".
'FROM `prog` '.
"WHERE (MATCH ($typeOfSearch) AGAINST ('$wordsToMatch' IN BOOLEAN MODE) ".
") ".$os.$lc.
' ORDER BY rel DESC '.
"LIMIT $limitStart , $limitSet";

Может возможно как-то небольшими корректировками запроса заставить выдавать менее релевантные результаты?

Бооольшой портал о мааалом бизнесе (http://www.bizguru.ru/) | Более 1000 бизнес-программ (http://1.44mb.ru) По выходным не работаю - не ищите меня в сети. В понедельник я обычно сам возвращаюсь :)
[Удален]
#1

Как пример вы можете держать некоторый стек запросов и находить расстояние ливенштейна от того что ищут и вместо спрашиваемого поставлять канонический. Пример:

Имеем стек запросов:

- Вино столовое

- Вино изабелла

Пользователь спрашивает

- Вино изОбелла

Находим расстояние ливенштейна со стеком и для минимальных расстояний (1, 2) добавляем в запрос, либо выполняем вместо пользовательского, в данном случае будет "Вино изабелла".

[Удален]
#2

можно даже не запросы хранить а слова, бить запрос на слова и искать минимальные среди имеющихся. Думаю гугл с яндексом так и работают, когда предлагают исправить запрос.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий