我们设置了一个全文索引,用于在网站(mysql/php)上进行搜索。
大多数时候搜索都很有效,但我们总是遇到这些奇怪的错误。
例如:
1)作品:《中国炒锅》
2)这不是“第一锅”
我的假设是第二个不起作用,因为:
a)因为只有3个字母,所以它就不叫“炒锅”
b)它踢出'第一',因为它在一些单词列表中可以忽略。
我的假设正确吗?
如果是这样的话,我该如何对两者进行调整:
a)以某种方式将“first”列为要在搜索中使用的词
b)不知何故,白名单“炒锅”,尽管它只是一个3个字母的单词
一如既往地谢谢你!
最佳答案
我的假设正确吗?
你在这两方面都是对的。如Natural Language Full-Text Searches所述:
某些单词在全文搜索中被忽略:
任何太短的词都会被忽略。全文搜索找到的单词的默认最小长度为四个字符。
停止字列表中的字将被忽略。stopword是诸如“the”或“some”这样的词,它非常常见,以至于被认为没有语义值。有一个内置的stopword列表,但它可以被用户定义的列表覆盖。
默认的stopword列表在Section 12.9.4, “Full-Text Stopwords”中给出。默认的最小字长和停止字表可以更改,如Section 12.9.6, “Fine-Tuning MySQL Full-Text Search”中所述。
如Fine-Tuning MySQL Full-Text Search所述:
被索引的词的最小和最大长度由AA>和ft_min_word_len
系统变量定义。(参见ft_max_word_len
)默认最小值是四个字符;默认最大值是版本依赖的。如果更改任一值,则必须重新生成FULLTEXT
索引。例如,如果要搜索三个字符的单词,可以通过在选项文件中放置以下行来设置Section 5.1.4, “Server System Variables”变量:
[我的qld]
ft_min_word_len=3
然后重新启动服务器并重建ft_min_word_len
索引。请特别注意此列表后面的说明中有关FULLTEXT
的注释。
要覆盖默认的stopword列表,请设置myisamchk系统变量。(请参见ft_stopword_file
)变量值应该是包含stopword列表的文件的路径名,或者是用于禁用stopword筛选的空字符串。服务器在数据目录中查找文件,除非指定了绝对路径名以指定其他目录。更改此变量的值或stopword文件的内容后,重新启动服务器并重新生成FULLTEXT
索引。
停止词列表是自由格式的。也就是说,可以使用任何非字母数字字符(如换行符、空格或逗号)分隔停止字。例外情况是下划线字符(“_
”)和单撇号(“'
”)被视为单词的一部分。stopword列表的字符集是服务器的默认字符集;请参阅第10.1.3.1节,“Section 5.1.4, “Server System Variables””。
关于mysql - 全文索引-MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13691482/