If I run this query and print the score of each rows, they are always 1:
Here are some sample query results:
First | Last | Score
------------------------------
Jonathan | Bush | 1
Joshua | Gilbert | 1
Jon | Jonas | 1
And this is the query that I run:
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;
The accepted answer is partially correct. According to the MySQL docs, MATCH AGAINST can return floats. The database engine, if MyISAM, will only return 1 on match. InnoDB fulltext searches with MATCH AGAINST will return floats so that higher quality matches can be ordered by the match result.
The BOOLEAN MODE supports only binary answers, means 0 or 1 whether the search string appears in the column or not. To get a decimal result to calculate a weight, you have to use match-against on indexed columns.
You can use the boolean mode this way to get your wheight either:
The advantage of the boolean mode is that you can use it on non-indexed columns but only with 0,1 as result, the non-boolean mode returns a decimal result but can only be applied on indexed columns... see also here.
Use the result of
NATURAL MODE
as score:Note: Give attention to the + operator. This one is only available in
BOOLEAN MODE
.Why I suggest
NATURAL MODE
for sorting by relevance is that it returns forJon Chris
:And
BOOLEAN MODE
could return for+Jon +Chris
:This is because both words are found in
BOOLEAN MODE
returning the score 2, butNATURAL MODE
adds more for the first entry because its a direct hit and/or direct following words returning the better search result.