我们设置了全文索引,用于在网站上搜索(mysql / php)。
搜索在大多数情况下都很有用,但我们会继续遇到这些奇怪的错误。
例如:
1)这有效:“中国炒锅”
2)这不是:“First Wok”
我的假设是第二个不起作用,因为: a)由于它只有3个字母,因此它会启动“炒锅” b)它开始'先',因为它在一些单词列表中被忽略。
我的假设是否正确?
如果是这样,我将如何调整两者: a)以某种方式将“第一个”列入白名单,以便在搜索中使用 b)以某种方式将“炒锅”列入白名单,尽管它只是一个3个字母的单词
一如既往地谢谢!
答案 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_len
和ft_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”。