我的查询主要在全文索引字段上运行。
查询如下:
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”的所有结果返回到顶部,但事实并非如此...事实上,DB中有两个条目,游戏标题为“地震” 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”条目的预期结果显示在结果的顶部?
答案 0 :(得分:0)
来自:
http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html
要索引的单词的最小和最大长度由ft_min_word_len和ft_max_word_len系统变量定义。 ....默认的最小值是四个字符;
因此在搜索中完全忽略了'ii'。
该页面还详细说明了如何更改最低
答案 1 :(得分:0)
你总是可以通过...添加订单。
ORDER BY
case when left( g.GameTitle, 8 ) = "Quake II" and length( trim( g.GameTitle )) = 8
then 1 else 2 end
这会将相同的Quake II(也是相同的长度)冲到顶部,以及其下的所有其他Quake II ......