2012-11-02 118 views
3

所以我想使用全文搜索实现更好的搜索功能,但它不像预期那样工作。它不会返回任何结果,或者我认为不相关的结果。mysql全文搜索没有返回预期结果

首先我检查:

显示变量,如 'ft_min%'

...回报为4

所以我有一个完整的游戏数据库。搜索的一个很好的例子是“刺客信条”。在数据库中它们实际上被存储为“刺客信条”(注意撇号)。所以,如果我做了以下查询:

SELECT g_name,MATCH(g_name)反对( '刺客信条')AS评分由 tgmp_games WHERE MATCH(g_name)反对( '刺客信条')的限制15

返回结果罚款(以下一些)

...但与搜索脚本,它采用了jQueryUI的自动完成下拉菜单,然后提交查询用更少的字符什么比整个单词时,它回来了空

SELECT g_name,MATCH(g_name)反对( '刺杀了')AS评分由 tgmp_games WHERE MATCH(g_name)反对( '刺杀了')的限制15

我也读到行的数如果数据库太低,数据库可能会产生影响,但在那里有25k行,所以应该没问题。我究竟做错了什么?

我可以得到的结果的输出,但更感兴趣的是如何获得零件搜索条件以返回一些结果。

Array 
(
    [g_name] => Assassins Creed III 
    [score] => 15.406005859375 
) 

Array 
(
    [g_name] => The Witcher 2: Assassins of Kings 
    [score] => 8.46316719055176 
) 

Array 
(
    [g_name] => Tenchu: Shadow Assassins 
    [score] => 8.46316719055176 
) 

Array 
(
    [g_name] => The Witcher 2: Assassins of Kings - Enhanced Edition 
    [score] => 8.27909851074219 
) 

Array 
(
    [g_name] => Assassin\'s Creed 
    [score] => 6.84770059585571 
) 

Array 
(
    [g_name] => Assassin\'s Creed III 
    [score] => 6.84770059585571 
) 

Array 
(
    [g_name] => Assassin's Creed II 
    [score] => 6.84770059585571 
) 

Array 
(
    [g_name] => Assassin's Creed: Revelations ... 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin\'s Creed: Revelations 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin's Creed: Brotherhood 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin's Creed: Bloodlines 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin's Creed II: Discovery 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin\'s Creed III: Liberation 
    [score] => 6.77157783508301 
) 

Array 
(
    [g_name] => Assassin's Creed: Altair's Chronicles 
    [score] => 6.69712924957275 
) 

Array 
(
    [g_name] => Assassin's Creed II: Bonfire of the Vanities 
    [score] => 6.69712924957275 
) 

另外这个命令的顺序很奇怪,因为“巫师2”比其他“刺客信条”游戏更高。不知道是否有某种模式可以让它避免陷入标点符号?

+0

您正在使用'limit'而没有'order by'。您可能想在“限制”之前添加“按分数降序排列”。 –

+0

为什么一些撇号在结果示例中转义而有些不是? –

+0

为了搜索的目的,您可以去除所有标点符号。 –

回答

5

查看用于布尔搜索的MySQL文档。 http://dev.mysql.com/doc/refman/5.5/en//fulltext-boolean.html。你可能想要使用的是*运算符(类似于%通配符)。因为MySQL的适用于全文索引的50%的规定

MATCH(g_name)AGAINST( '*刺杀了' IN BOOLEAN MODE)

行的表中的次数进入的影响。如果一个单词出现在表中超过50%的行中,那么MySQL认为它在提供缩小结果的任何值时过于常见,并且它被忽略。这通常用于消除诸如“the”之类的词。

+0

正是我需要的,谢谢!还有用于知道重新:50%的规则 – Horse