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


Автор: frenkys 28.4.2010, 00:41
Есть таблица Table с именами (поле name).

Vasya Pupkin
Andrey Olegovich
Oleg Sergeevich
Oleg Eugenevich

Делаю запрос:

Код

select * from Table where name LIKE '%Oleg%' order by name


получаю отсортированые по имени
Код


Andrey Olegovich
Oleg Eugenevich
Oleg Sergeevich


а как сделать чтоб они сортировались по релевантности? тоесть чтоб было:


Код

Oleg Eugenevich
Oleg Sergeevich
Andrey Olegovich




Автор: Akina 28.4.2010, 07:47
Цитата(frenkys @  28.4.2010,  01:41 Найти цитируемый пост)
как сделать чтоб они сортировались по релевантности?

Получить в запросе поле со значением релевантности и отсортировать по нему.
Применительно к MySQL читать справку по Match ... Against ...

Автор: frenkys 28.4.2010, 09:06
Дело в то что слишком мало текста для использования FULLTEXT INDEX
Код

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('MySQL');
Empty set (0.00 sec)

Поиск по слову ``MySQL'' в предыдущем примере не приводит к каким-либо результатам,
 так как это слово присутствует более чем в половине строк. 
По существу, данное слово целесообразно трактовать как стоп-слово (т.е. слово с нулевой смысловой ценностью). 
Это наиболее приемлемое решение - запрос на естественном языке не должен возвращать каждую вторую строку из таблицы размером 1Гб.

Маловероятно, что слово, встречающееся в половине строк таблицы, определяет местонахождение релевантных документов.
 На самом деле, наиболее вероятно, что будет найдено много не относящихся к делу документов. 
Общеизвестно, что такое случается слишком часто при попытке найти что-либо в Интернет с помощью поисковых машин. 
Именно на этом основании подобным строкам должно быть назначено низкое смысловое значение в данном конкретном наборе данных. 

Автор: Akina 28.4.2010, 09:15
Цитата(frenkys @  28.4.2010,  10:06 Найти цитируемый пост)
слишком мало текста для использования FULLTEXT INDEX

Значит, рожай свою пользовательскую фнукцию расчёта релевантности и используй её в запросе.

Автор: frenkys 28.4.2010, 09:17
Может есть где почитать что-то, что б не изобретать велосипед, вот в фейсбуке вконтакте работает так же

Автор: Akina 28.4.2010, 09:53
Я не думаю, что есть что-то готовое - понятие релевантности всё-таки априори применяется к большим массивам текстовой информации.
У тебя же совершенно иной случай... погугли, пожалуй, по термину Shingle (шингл).

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