我一直在使用 MySQL 的全文
搜索的 bool 模式
,但我不理解有时得到的结果。
例如,这里是一些数据行..
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
中有“non”?
另外,如果我将其更改为:
SELECT auction_id,NAME,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -"non auto"' IN BOOLEAN MODE);
我没有收到返回的结果;我应该把除了 100553
之外的所有内容都获取吗?
最佳答案
如 Boolean Full-Text Searches 下所述:
Boolean full-text searches have these characteristics:
[ deletia ]
- The minimum and maximum word length full-text parameters apply:
innodb_ft_min_token_size
andinnodb_ft_max_token_size
forInnoDB
search indexes, andft_min_word_len
andft_max_word_len
forMyISAM
ones.
如 Natural Language Full-Text Searches 下所述:
Some words are ignored in full-text searches:
- Any word that is too short is ignored. The default minimum length of words that are found by full-text searches is three characters for
InnoDB
search indexes, or four characters forMyISAM
. You can control the cutoff by setting a configuration option before creating the index:innodb_ft_min_token_size
configuration option forInnoDB
search indexes, orft_min_word_len
forMyISAM
.
关于mysql - 理解全文 bool 模式结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17021831/