Сортировка по релевантности результатов полнотекстового поиска в логическом режиме.

tend

Новичок
Сортировка по релевантности результатов полнотекстового поиска в логическом режиме.

Как осуществить сортировку по релевантности результатов полнотекстового поиска в логическом режиме?
 

alpine

Новичок
tend
А чем отличается сортировка по релевантности при обычном фултекст поиске от сортировки по релевантности IN BOOLEAN MODE ?
RTFM 12.7. Full-Text Search Functions (там даже пример есть)
 

tend

Новичок
пытаюсь отсортировать таким запросом:
SELECT `id`,`name`,MATCH (`name`) AGAINST ('фраза' IN BOOLEAN MODE) AS score FROM `table` WHERE MATCH (`name`) AGAINST ('фраза' IN BOOLEAN MODE) ORDER BY score DESC
но не получается. Ошибки не пишет. Просто не сортирует по релевантности. Происходит сортировка по ID. Если ID - primary key, это никак не влияет на сортировку?
Подскажите, в чем может быть проблема?
 

alpine

Новичок
tend
Попробуйте так:
[sql]
SELECT `id`,`name`,MATCH (`name`) AGAINST ('фраза') AS score FROM `table` WHERE MATCH (`name`) AGAINST ('фраза' IN BOOLEAN MODE) ORDER BY score DESC
[/sql]
Из комментариев в документации.
Posted by kim markegard on June 24 2005 6:31pm [Delete] [Edit]

I'm not sure why MATCH/AGAINST uses a different scoring method when in boolean mode and when it's not. As stated above, if searching 3 terms in boolean mode, the score will be between 1 and 3 (integer). However, if not in boolean mode, the score is a floating point value.

It seems that non-boolean mode returns a "real" relevancy (based on how often each term was found I presume). In boolean mode it only returns how many terms were found. To me, this is not really relevancy. For instance, if searching on 2 terms, one result may have 20 occurrences of each term and another may have only 1 occurrence of each word, yet they will both return "2" as their relevance.
 

tend

Новичок
Поиск логический, и пользователь может ввести разные варианты поиска:
"фраза"
+фраза -фраза
фраз*
и т.д.
Я не пробовал, но мне кажется, что по таким запросам обычный (не логический) поиск релевантность посчитает неправильно. Или я ошибаюсь?
 

Orgishe

Новичок
2alpine
у меня от таких запросов часто опадала БД как озимые. (mysql 4.1.16). пмсм неверно это.
 

alpine

Новичок
Я предлагаю всем читателям этого топика проследовать по этой ссылке http://dev.mysql.com/doc/refman/4.1/en/fulltext-boolean.html и ознакомится с комментариями, в которых рассматриваются особенности работы fulltext-search in boolean mode в MySQL 4.1+. Так же там есть конкретные примеры реализации.

P.S. Лично я для себя решил, что пользовать поиск в логическом режиме не стоит, потому что с ним больше мороки для конечного пользователя чем пользы.

-~{}~ 27.08.06 17:35:

Orgishe
Если у вас "от таких запросов часто опадала БД как озимые", то нужно смотреть логи.
 

tend

Новичок
в общем я так и не сделал сортировку по релевантности, но протестировал имеющийся поиск по фразе:
привет, "как дела", я тут занимаюсь делами - тестирую поиск "на сайте" а ты как? во какой запрос! :)
нашлось около 160 записей из 1100, искало 76 секунд :))
знаю, что скорость сильно зависит от фуллиндекса (у меня его пока нет), но в 76 раз, как мне кажется, не будет же все-равно быстрее... или будет?
подскажите, как сильно изменит скорость фуллиндекс?
 

phprus

Moderator
Команда форума
tend
По идее после добавления fulltext индекса скорость должна возрасти очень сильно. Так как на сколько я знаю если нет fulltext индекса то будет производится просмотр всех записей таблици, а это очень долго.
 

alpine

Новичок
tend
Приколист? Да? Индекс нужно создавать _ОБЯЗАТЕЛЬНО_.
 

Orgishe

Новичок
2alpine
просто такая запись
MATCH (`name`) AGAINST ('фраза фраза2')
и такая
MATCH (`name`) AGAINST ('+фраза* +фраза2*' IN BOOLEAN MODE )
вернут в принципе разные результаты, а для других целей смысла булевого поиска я не вижу, тогда действительно лучше использовать номаральный. В логах небыло ничего - просто выдавало критическую ошибку с закрыванием программы и предложением о стучании в m$. Хостинг на w2003

Автор оригинала: tend
подскажите, как сильно изменит скорость фуллиндекс?
может и в сотни раз
 

alpine

Новичок
Orgishe
Я в курсе что они возвращают разные результаты. Просто есть мнение, что правильно релевантность считает именно первый вариант (не в логическом режиме), и сортировать записи следует именно по релевантности оцененной для не логического поиска, а искать логическим.

PS Похоже что вы не удосужились прочитать, то что я предложил, и соответственно оказались не в теме.
 

tend

Новичок
tend
Приколист? Да? Индекс нужно создавать _ОБЯЗАТЕЛЬНО_.
создам я, создам обязательно :)

-~{}~ 02.09.06 00:21:

добавил я fulltext индекс
кстати, с этим индексом больше ничего не надо делать? он сам все делает что надо (переиндексирует там и все такой)?
протестировал скорость на обычном (не логическом) полнотекстовом поиске - если выводить результаты постранично (то есть не все сразу на одной странице), тогда скорость очень радует - 0.0038 секунды! :)

-~{}~ 02.09.06 00:23:

кстати, объем базы в 2 раза больше
с этим ничего нельзя сделать (оптимизировать там как-то, сжать, может еще что...)?
 
Сверху