Дальнейшее улучшение порядка результатов MySql Query - PullRequest
0 голосов
/ 08 марта 2012

У меня есть запрос, который работает в основном с полнотекстовым индексированным полем.

Запрос выглядит следующим образом:

SELECT
    MATCH (g.GameTitle) AGAINST ('quake ii') as Score,
    g.*, p.id AS platformid,
    p.alias AS PlatformAlias,
    p. name,
    p.icon
FROM
    games as g,
    platforms as p
WHERE
    MATCH (g.GameTitle) AGAINST ('quake ii')
    AND g.Platform = p.id;

Я ожидаю, что mysql вернет все результаты, наиболее близкие к поискустрока «quake ii» в верхней части, однако это не так ... на самом деле, в БД есть две записи с названием игры «quake ii», и они разделены на любом конце порядка счета, даже еслиони имеют одинаковый счет.

Это можно увидеть в результатах здесь:

Score               id      GameTitle
-----               --      ---------
5.883631706237793   393     Quake II
5.883631706237793   777     Quake
5.883631706237793   778     Quake 4
5.883631706237793   2922    Quake
5.883631706237793   2924    Quake II
5.817491054534912   427     Quake III Arena
5.817491054534912   2925    Quake III Arena
5.689572811126709   85      Enemy Territory: Quake Wars

Как я могу получить желаемые результаты обеих записей "Quake II", чтобы появиться в верхней частирезультаты ??

Ответы [ 2 ]

0 голосов
/ 08 марта 2012

вы всегда можете добавить порядок на ...

ORDER BY
   case when  left( g.GameTitle, 8 ) = "Quake II" and length( trim( g.GameTitle )) = 8
      then 1 else 2 end

Это приведет к тому, что тот же Quake II (такой же длины тоже) будет сверху, а все остальные под ним ...

0 голосов
/ 08 марта 2012

From:

http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html

Минимальная и максимальная длина индексируемых слов определяется системными переменными ft_min_word_len и ft_max_word_len..... Минимальное значение по умолчанию составляет четыре символа;

Таким образом, «ii» фактически полностью игнорируется при поиске.

На этой странице также подробно описано, как изменить минимальное значение

...