我一直在玩boolean mode
与MySQL的fulltext
搜索,但我不理解我有时会得到的结果。
例如,这里有一些数据行..
auction_id,'name'
100543,'2011-12 Fleer Retro patch auto'
100544,'2011-12 Fleer Retro patch auto jordan'
100545,'2011-12 Fleer Retro autograph'
100546,'2011-12 Fleer Retro autographed'
100547,'2011-12 Fleer Retro auto'
100549,'1999 jordan auto'
100550,'1999 auto jordan'
100551,'1999 autograph jordan'
100552,'1999 autographed jordan patch'
100553,'1999 jordan non auto'
现在,如果我运行查询:
SELECT auction_id,NAME,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto' IN BOOLEAN MODE);
我得到了返回的行100544,100549,100550,100553
,这是正确的。但是,如果我运行此查询:
SELECT auction_id,NAME,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -non' IN BOOLEAN MODE);
我得到了相同的结果;不应该100553
离开,因为它有"非"在name
?
此外,如果我将其更改为:
SELECT auction_id,NAME,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -"non auto"' IN BOOLEAN MODE);
我没有得到任何结果;除了100553
之外,我应该把它们全部拿到吗?
答案 0 :(得分:1)
正如Boolean Full-Text Searches所述:
布尔全文搜索具有以下特征:
[ deletia ]
- 最小和最大字长全文参数适用:
InnoDB
和innodb_ft_min_token_size
用于MyISAM
个搜索索引,innodb_ft_max_token_size
和ft_min_word_len
用于{{ 1}}个。
正如ft_max_word_len
所述:
全文搜索中会忽略某些字词:
- 任何太短的单词都会被忽略。通过全文搜索找到的默认最小单词长度是
InnoDB
个搜索索引的三个字符,或MyISAM
的四个字符。您可以在创建索引之前设置配置选项来控制截止:InnoDB
搜索索引的Natural Language Full-Text Searches配置选项或MyISAM
的{{3}}。