【问题标题】:Mysql full text search cannot find a word - why?Mysql全文搜索找不到单词-为什么?
【发布时间】:2012-01-10 16:56:05
【问题描述】:

(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');

然后运行这些查询:

SELECT * FROM test WHERE word='three';

结果 = [ 1, '三' ]

SELECT word FROM test WHERE MATCH(word) AGAINST ('three*' IN BOOLEAN MODE );

结果 = []

SELECT word FROM test WHERE MATCH(word) AGAINST ('three' IN BOOLEAN MODE);

结果 = []

SELECT word FROM test WHERE MATCH(word) AGAINST ('thre*' IN BOOLEAN MODE );

结果 = []

SELECT word FROM test WHERE MATCH(word) AGAINST ('thorn*' IN BOOLEAN MODE )

结果 = [ 2, '刺' ]

SELECT word FROM test WHERE MATCH(word) AGAINST ('thorn' IN BOOLEAN MODE)

结果 = [ 2, '刺' ]

SELECT word FROM test WHERE MATCH(word) AGAINST ('thor*' IN BOOLEAN MODE)

结果 = [ 2, '刺' ]

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

【问题讨论】:

    标签: mysql sql database full-text-search


    【解决方案1】:

    因为三是停用词,全文将忽略该词并且不返回与单词“三”相关的结果。基本上,停用词的存在是为了提高性能,并且不会返回包含“is, are, there, be...”之类的词的每一行。这是停用词的list,检查一下。

    【讨论】:

    • 谢谢 - 我忘记了停用词。
    【解决方案2】:

    要添加到上面的答案:如果您确实想为全文索引添加停用词,只需将其添加到您的 .cnf 文件中,重新启动 MySQL 引擎并重建索引: ft_stopword_file = ""除此之外,如果您还没有,请将最小单词降低到 3 (ft_min_word_len=3) 以便能够搜索 3 个字母的单词。

    【讨论】:

    • 好建议 - 我会进一步研究。
    • @John 如果您更改 ft_min_word_len 全文的性能很可能会降低很多。请注意这一点。
    • 能否以编程方式指定是否要使用停用词?
    猜你喜欢
    • 2012-06-08
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    相关资源
    最近更新 更多