mysql - 全文索引 - 什么是自然语言模式

zoz*_*ozo 8 mysql full-text-search

我对这篇文章有疑问:http://dev.mysql.com/doc/refman/5.6/en/fulltext-natural-language.html.

在这里我发现了类似的查询

SELECT * FROM articles
WHERE MATCH (title,body)
AGAINST ('database' IN NATURAL LANGUAGE MODE);
Run Code Online (Sandbox Code Playgroud)

我不明白的是自然语言模式究竟是什么?我找不到确切的定义.

any1可以提供定义吗?它是如何工作的?

Sam*_*vic 16

MySQL的自然语言全文搜索旨在将搜索查询与语料库匹配,以找到最相关的匹配.所以假设我们有一篇文章包含"我爱馅饼",我们有文件d1,d2,d3(你的情况下是数据库).文件1和2分别涉及体育和宗教,文件3涉及食品.您的查询,

SELECT*FROM articles WHERE MATCH(title,body)AGAINST('database'IN NATURAL LANGUAGE MODE);

将返回d3,然后是d2,d1(d2的随机顺序,d1取决于哪个更接近于文章)因为d3与文章最匹配.

MYSQL使用的基础算法可能是tf-idf算法,其中tf代表术语频率,而idf代表逆文档频率.正如它所说的那样,只是文章中文字w出现的次数.idf基于单词出现的文档数量.因此,许多文档中出现的词语无助于决定最具代表性的文档.tf*idf的乘积产生分数越高,单词代表文档越好.所以'pie'只会出现在文档d3中,因此会有很高的tf和高的idf(因为它是反向的).然而,''将具有高的tf但是低的idf将发生tf并且给出低分.

MYSQL自然语言模式还带有一组停用词(a,a,some等),并删除少于4个字母的单词.您可以在您提供的链接中看到.

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

Any word that is too short is ignored. The default minimum length of words that are found by full-text searches is three characters for
Run Code Online (Sandbox Code Playgroud)

InnoDB搜索索引,或MyISAM的四个字符.您可以通过在创建索引之前设置配置选项来控制截止:InnoDB搜索索引的innodb_ft_min_token_size配置选项或MyISAM的ft_min_word_len.

Words in the stopword list are ignored. A stopword is a word such as “the” or “some” that is so common that it is considered to have
Run Code Online (Sandbox Code Playgroud)

零语义价值.有一个内置的禁用词列表,但它可以被用户定义的列表覆盖.对于InnoDB搜索索引和MyISAM搜索索引,禁用词列表和相关配置选项是不同的.停用词处理由InnoDB搜索索引的配置选项innodb_ft_enable_stopword,innodb_ft_server_stopword_table和innodb_ft_user_stopword_table以及MyISAM搜索索引的ft_stopword_file控制.

  • 人类的解释怎么样——比如差异的例子?我仍然不明白它到底意味着什么,或者与其他修饰符的不同之处。 (3认同)
  • 答案中的查询似乎与答案中的“我喜欢派”示例不匹配;即,查询根本不使用“我喜欢馅饼”。给定的查询(使用“数据库”)来自 MySQL 文档示例,其中他们正在搜索文章表中标题或正文列中包含“数据库”一词的条目。如果您想查找与“我爱馅饼”相关的文章,大概您会使用该查询,但使用 ...AGAINST ('我爱馅饼' IN NATURAL LANGUAGE MODE); (2认同)