mySQL search / MATCH () AGAINST () help - PullRequest
       1

mySQL search / MATCH () AGAINST () help

0 голосов
/ 01 августа 2010

У меня есть база данных названий песен.Каждому названию песни присваивается целое число баллов.Чем выше балл, тем выше его рейтинг на моем сайте.

Так что, если у "Lady Gaga - Poker Face" счет 23039, а у "Eminem - Not Afraid" 13400, то Lady Gaga будетвыше Eminem.

Это, конечно, достигается простой оценкой ORDER BY DESC

Однако на моем веб-сайте также есть функция поиска, где люди могут вводить фразу-ключевое слово, чтобы вернуть список названий песен.,Я делаю это с помощью запроса MATCH () AGAINST () следующим образом:

Метод # 1

SELECT * FROM links MATCH(songtitle) AGAINST({the keyword}) LIMIT 5';

Это работает, но я хочу отобразить эти 5 результатовв порядке их оценки.Однако если я выполню этот запрос вместо этого:

Метод # 2

SELECT * FROM links MATCH(songtitle) AGAINST({the keyword}) ORDER BY score DESC LIMIT 5';

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

Возьмите этот пример набора данных и сценариев:

Набор данных:

song title                  |       score
pink - sober                |        2002
pink - funhouse             |        2001
pink floyd - high hopes     |        2000
pink floyd - on the run     |        1999
pink floyd - brain damage   |        1998
pink floyd - money          |        1997
pink floyd - time           |        1996

Сценарии:

  • При поиске «Pink Floyd» с помощью метода first , описанного выше, вы получаете 5 песен Pink Floyd вказалось бы, случайный порядок.Это здорово, , но , я хочу, чтобы песни, которые возвращаются, были отсортированы по их партитуре в порядке убывания.Таким образом, вы добавляете «ORDER BY Score DESC» к первому методу, и это дает вам второй метод, описанный выше ...

  • Когда вы ищете «Pink Floyd», используя second указанным выше способом, вы получаете песни Pink Floyd в правильном порядке (по заказу партитуры DESC), но теперь вы также получаете две песни поп-артиста "Pink", потому что в базе данных есть 2 песни Pink с более высоким балломчем любая из песен Pink Floyd.

Желаемые результаты:

  • Поиск "Pink Floyd" возвращает все 5песни pink floyd, упорядоченные по назначенному партитуре в порядке убывания.

  • Поиск «Pink» возвращает две песни Pink в порядке убывания их назначенного партитуры.Если бы песни Pink Floyd появлялись после обеих песен Pink, это тоже было бы хорошо.

Видите, что я имею в виду?Дайте мне знать, если вам нужны какие-либо разъяснения!

Дейв

1 Ответ

0 голосов
/ 01 августа 2010

Похоже, что вы сможете получить «релевантность» из матча - проверьте эту ссылку Учитывая это, вы можете заказать сначала по релевантности, а затем по баллу.

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