2015-04-02 69 views
0

我遇到与功能匹配的问题。当我运行以下查询时:全文搜索引导加不能正常工作

SELECT 
     i.name, 
     n.trad, 
     i.icon_name, 
     i.quality 
    FROM strings_item AS n 
     LEFT JOIN items AS i ON n.name = i.description 
    WHERE match(n.body_en) against ('+cat*+queen*' IN BOOLEAN MODE) 

它返回包含cat或queen的行。是不是+应该返回包含两个单词的行?

编辑:

下面是一些例子的数据返回:

Cataclysm's Jaws 
Catalium 
Catalium Rod 
Grand Master's Gleaming Catalium Dagger 

而且好像它永远不会返回与女王东西。所以,我试图改变匹配单词“+猫+女王”这里是它显示:

Iceheart Queen's Shield 
Queen Klaw's Pauldrons 
[Playing Card] Queen of Hearts 
Cat Queen Egg 
Cat Queen Box 

PS:我一直以相同的顺序这些话作为mysql和行我期待因为是猫女王蛋

+1

它应该像你期望的那样工作。您可以尝试在+猫*和+女王*之间添加一个空格吗? – 2015-04-02 08:49:01

+0

当我在这两个单词之间留空时,它不会返回任何结果。 – loumi 2015-04-02 08:52:45

+0

此链接可能会帮助你http://stackoverflow.com/questions/792875/which-sql-query-is-better-match-against-or-like – Ankit 2015-04-02 08:54:19

回答

0

您的查询是正确的。您的数据库没有包含cat*queen*的行。

默认情况下,ft_min_word_len在sql中的值为4。 (https://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_ft_min_word_len)。

因此,sql不会在其全文索引中使用少于4个字符的单词。

如:

Instructions  1 
are    2 
applicable  3 
to    4 
these    5 
Adventure   6 

在此行中,SQL不会接话2,3和4在其全文索引。

要么更改您的ft_min_word_len,要么添加包含cat以上的4个字符以上单词的行。

只需在此添加,您可以在全文索引中找到也被忽略的stop words的列表。 http://mssqltipsandtricks.blogspot.de/2012/07/noisestop-words-in-sql-server.html