MySQL: почему оценка всегда равна 1 в полнотексте? - PullRequest
3 голосов
/ 03 июля 2011

Если я запускаю этот запрос и печатаю счет каждой строки, они всегда равны 1:

Вот некоторые примеры результатов запроса:

First     |  Last     | Score
------------------------------
Jonathan  |  Bush     | 1
Joshua    |  Gilbert  | 1
Jon       |  Jonas    | 1

И это запрос, который япробег:

SELECT First, Last, MATCH(First, Last) AGAINST ('Jon' IN BOOLEAN MODE) AS score 
FROM users 
WHERE MATCH(First, Last) AGAINST('Jon' IN BOOLEAN MODE)
ORDER BY score DESC;

Ответы [ 3 ]

5 голосов
/ 03 июля 2011

BOOLEAN MODE поддерживает только двоичные ответы, означает 0 или 1 независимо от того, появляется строка поиска в столбце или нет.Чтобы получить десятичный результат для вычисления веса, вы должны использовать сопоставление с индексированными столбцами.

Вы можете использовать логический режим таким образом, чтобы получить вес:

SELECT *, ((1.3 * (MATCH(column1) AGAINST ('query' IN BOOLEAN MODE))) +
(0.6 * (MATCH(column2) AGAINST ('query' IN BOOLEAN MODE)))) AS relevance
FROM table WHERE ( MATCH(column1,column2) AGAINST
('query' IN BOOLEAN MODE) ) ORDER BY relevance DESC

Преимущество логического режима состоит в том, что вы можете использовать его для неиндексированных столбцов, но в результате только с 0,1, не булевский режим возвращает десятичный результат, но может применяться только к индексированным столбцам ... см. Также здесь .

2 голосов
/ 12 апреля 2015

Используйте результат NATURAL MODE в качестве оценки:

SELECT First, Last, MATCH(First, Last) AGAINST ('Jon') AS score 
FROM users 
WHERE MATCH(First, Last) AGAINST('+Jon' IN BOOLEAN MODE)
ORDER BY score DESC;

Примечание: Обратите внимание на оператор +.Этот доступен только в BOOLEAN MODE.

. Почему я предлагаю NATURAL MODE для сортировки по релевантности, так это то, что он возвращает Jon Chris:

Jon Chris        | Jonas
Jon Martin Chris | Jonas

И BOOLEAN MODE Могут вернуть +Jon +Chris:

Jon Martin Chris | Jonas
Jon Chris        | Jonas

Это потому, что оба слова находятся в BOOLEAN MODE, возвращая счет 2, но NATURAL MODE добавляет больше для первой записи, потому что это прямойнажимайте и / или выполняйте прямые слова, возвращая лучший результат поиска.

0 голосов
/ 16 марта 2017

Принятый ответ частично правильный.Согласно документации MySQL, MATCH AGAINST может возвращать числа с плавающей точкой.Механизм базы данных, если MyISAM, вернет только 1 в совпадении.InnoDB полнотекстовый поиск с MATCH AGAINST будет возвращать числа с плавающей точкой, так что по результату совпадения могут быть упорядочены совпадения более высокого качества.

...