全文索引 - mysql

时间:2012-12-03 20:52:34

标签: mysql

我们设置了全文索引,用于在网站上搜索(mysql / php)。

搜索在大多数情况下都很有用,但我们会继续遇到这些奇怪的错误。

例如:

1)这有效:“中国炒锅”

2)这不是:“First Wok”

我的假设是第二个不起作用,因为: a)由于它只有3个字母,因此它会启动“炒锅” b)它开始'先',因为它在一些单词列表中被忽略。

我的假设是否正确?

如果是这样,我将如何调整两者: a)以某种方式将“第一个”列入白名单,以便在搜索中使用 b)以某种方式将“炒锅”列入白名单,尽管它只是一个3个字母的单词

一如既往地谢谢!

1 个答案:

答案 0 :(得分:3)

  

我的假设是否正确?

两种情况都是正确的。正如Natural Language Full-Text Searches所述:

  

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

     
      
  • 任何太短的单词都会被忽略。通过全文搜索找到的默认最小单词长度为四个字符。

  •   
  • 会忽略禁用词列表中的字词。禁用词是诸如“the”或“some”之类的词,它是如此常见以至于它被认为具有零语义值。有一个内置的禁用词列表,但它可以被用户定义的列表覆盖。

  •   
     

默认的停用词列表在Section 12.9.4, “Full-Text Stopwords”中给出。默认的最小字长和停用词列表可以按照Section 12.9.6, “Fine-Tuning MySQL Full-Text Search”

中的说明进行更改

正如Fine-Tuning MySQL Full-Text Search所述:

  
      
  • 要编入索引的单词的最小和最大长度由ft_min_word_lenft_max_word_len系统变量定义。 (参见Section 5.1.4, “Server System Variables”。)默认最小值为四个字符;默认最大值取决于版本。如果更改任一值,则必须重建FULLTEXT索引。例如,如果要搜索三个字符的单词,可以通过将以下行放在选项文件中来设置ft_min_word_len变量:

    [mysqld]
    ft_min_word_len=3
    
         

    然后重新启动服务器并重建FULLTEXT索引。请特别注意此列表后面的说明中有关myisamchk的评论。

  •   
  • 要覆盖默认的停用词列表,请设置ft_stopword_file系统变量。 (参见Section 5.1.4, “Server System Variables”。)变量值应该是包含禁用词列表的文件的路径名,或者是用于禁用禁用词过滤的空字符串。除非给出绝对路径名以指定其他目录,否则服务器将在数据目录中查找该文件。更改此变量的值或停用词文件的内容后,重新启动服务器并重建FULLTEXT索引。

         

    禁用词汇表是自由格式的。也就是说,您可以使用任何非字母数字字符(如换行符,空格或逗号)来分隔停用词。例外是下划线字符(“_”)和单个撇号(“'”),它们被视为单词的一部分。禁用词列表的字符集是服务器的默认字符集;请参见第10.1.3.1节“Server Character Set and Collation”。

  •