Arhn - архитектура программирования

поиск в mySQL / помощь ПОИСКПОЗ() ПРОТИВ()

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

Таким образом, если «Lady Gaga — Poker Face» набрала 23039 баллов, а «Eminem — Not Afraid» — 13400 баллов, Lady Gaga будет выше Эминема.

Это, конечно, достигается с помощью простого ORDER BY score 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» с помощью второго метода, описанного выше, вы получаете песни Pink Floyd в правильном порядке (упорядоченные по партитуре DESC), но теперь вы также получаете две песни поп-исполнителя «Pink». , потому что в базе есть 2 песни Pink с более высоким баллом, чем любая из песен Pink Floyd.

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

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

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

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

Дэйв

31.07.2010

Ответы:


1

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

31.07.2010
  • У вас случайно нет примеров кода? Я читал об использовании MATCH() AGAINST() в логическом режиме и т. д., но я не уверен на 100%, что мне нужно. Это то, о чем ты говоришь? 01.08.2010
  • «боюсь, нет — по предоставленной ссылке есть несколько примеров кода — они вам не подходят? 01.08.2010
  • Вечером посмотрю подробнее, может получится. Спасибо 01.08.2010
  • Это действительно помогло! Спасибо, Уилл А. В моем случае запрос был таким: SELECT *, MATCH(songtitle) AGAINST('{keyword}') as Relevance FROM links WHERE authored = true AND MATCH(songtitle) AGAINST('{keyword}' IN BOOLEAN MODE) ORDER BY Релевантность DESC, оценка DESC LIMIT 5 01.08.2010
  • Прекрасная работа - рад слышать, что все в порядке. 01.08.2010
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..