2012-12-03 86 views
1

我们有一个全文索引设置用于在网站上搜索(mysql/php)。全文索引 - mysql

这些搜索大部分时间都很有用,但我们仍然遇到这些奇怪的错误。

例如:

1)本作品: “中国铁锅”

2)这不: “一镬”

我的假设是,第二不工作,因为: a)由于它只有3个字母,因此它会弹出'炒锅' b)由于它在某些要忽略的单词列表中,它会弹出'first'。

我的假设是否正确?

如果是这样,我怎么会去扭捏的事情都: 一)不知何故白名单“第一”作为搜索 b尽管它是一个3个字母的单词只有

使用)不知何故白名单“炒锅”一个字

一如既往的感谢!

+0

你得到了什么错误?在正常情况下,你的假设并不成立。 –

+1

您是否尝试过修改最小全文长度:http://stackoverflow.com/questions/1585611/mysql-full-text-search-for-words-with-three-or-less-letters-这可能会忽略单词即使您匹配较长的字符串(两个字组合),也可以使用3个字母或更少的字母。所以也许中国炒锅其实只匹配中文 –

+0

@ coder1984 - 抱歉,我没有收到错误。我错过了。我们只是没有得到任何搜索结果(对于我们知道的事情存在于数据库中)。 – Kevin

回答

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”。

+0

真棒信息。谢谢! – Kevin