Mysql全文搜索找不到一个字 - 为什么?

Joh*_*ohn 4 mysql sql database full-text-search

(mysql 5.1.36)

我试图找出为什么当我在全文查询中搜索"三"这个词时,我得不到任何结果.如果单词"three"是字段中的唯一文本,或者它是句子的一部分,则返回相同的结果.

它很容易重现:

CREATE TABLE `test`( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT , `word` TEXT NOT NULL , PRIMARY KEY (`id`) ); 
ALTER TABLE `test` ADD FULLTEXT `NewIndex1` (`word`);
INSERT INTO `test`(`id`,`word`) VALUES ( NULL,'three');
INSERT INTO `test`(`id`,`word`) VALUES ( NULL,'thorn');
Run Code Online (Sandbox Code Playgroud)

然后运行这些查询:

SELECT * FROM test WHERE word='three';
Run Code Online (Sandbox Code Playgroud)

结果= [1,'三']

SELECT word FROM test WHERE MATCH(word) AGAINST ('three*' IN BOOLEAN MODE );
Run Code Online (Sandbox Code Playgroud)

result = []

SELECT word FROM test WHERE MATCH(word) AGAINST ('three' IN BOOLEAN MODE);
Run Code Online (Sandbox Code Playgroud)

result = []

SELECT word FROM test WHERE MATCH(word) AGAINST ('thre*' IN BOOLEAN MODE );
Run Code Online (Sandbox Code Playgroud)

result = []

SELECT word FROM test WHERE MATCH(word) AGAINST ('thorn*' IN BOOLEAN MODE )
Run Code Online (Sandbox Code Playgroud)

结果= [2,'刺']

SELECT word FROM test WHERE MATCH(word) AGAINST ('thorn' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

结果= [2,'刺']

SELECT word FROM test WHERE MATCH(word) AGAINST ('thor*' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

结果= [2,'刺']

为什么全文搜索"三"没有返回结果?

Sav*_*ova 7

因为三个是停用词,全文将忽略该单词并且不返回与单词"三"相关的结果.基本上,存在停用词以提高性能,并且不返回包含诸如"是,是,那里,有......"之类的单词的每一行.这是停用词列表,检查它们.