0

我一直在玩boolean modeMySQL 的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

4

1 回答 1

1

Boolean Full-Text Searches 中所述

布尔全文搜索具有以下特征:

[删除]

自然语言全文搜索中所述

在全文搜索中会忽略某些词:

  • 任何太短的单词都会被忽略。全文搜索找到的单词的默认最小长度是三个字符(对于InnoDB搜索索引)或四个字符(对于MyISAM. 您可以通过在创建索引之前设置配置选项来控制截止:搜索索引的innodb_ft_min_token_size配置选项InnoDB,或ft_min_word_len用于MyISAM.
于 2013-06-10T10:38:44.903 回答