12

我对这篇文章有疑问: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);

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

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

4

1 回答 1

24

MySQL 的自然语言全文搜索旨在将搜索查询与语料库进行匹配,以找到最相关的匹配项。因此,假设我们有一篇包含“我爱派”的文章,并且我们有文档 d1、d2、d3(您的案例中的数据库)。文件 1 和 2 分别是关于体育和宗教的,文件 3 是关于食物的。您的查询,

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

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

MYSQL 使用的底层算法可能是 tf-idf 算法,其中 tf 代表词频,idf 代表逆文档频率。tf 正如它所说,只是文章中的单词 w 在 A 文档中出现的次数。idf 基于单词出现在多少文档中。因此,出现在许多文档中的词无助于确定最具代表性的文档。tf*idf 的乘积产生一个分数,越高,单词代表文档的效果越好。所以“派”只会出现在文档 d3 中,因此会有一个高 tf 和一个高 idf(因为它是相反的)。而 'the' 的 tf 较高但 idf 较低,这将导致 tf 超出并给出低分。

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

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

任何太短的单词都会被忽略。全文搜索找到的默认最小单词长度对于 InnoDB 搜索索引是三个字符,对于 MyISAM 是四个字符。您可以通过在创建索引之前设置配置选项来控制截止:InnoDB 搜索索引的 innodb_ft_min_token_size 配置选项,或 MyISAM 的 ft_min_word_len。

停用词列表中的单词将被忽略。停用词是诸如“the”或“some”之类的词,它非常常见,以至于被认为具有零语义值。有一个内置的停用词列表,但它可以被用户定义的列表覆盖。InnoDB 搜索索引和 MyISAM 搜索索引的停用词列表和相关配置选项不同。停用词处理由配置选项 innodb_ft_enable_stopword、innodb_ft_server_stopword_table 和 innodb_ft_user_stopword_table 用于 InnoDB 搜索索引和 ft_stopword_file 用于 MyISAM 搜索索引控制。

于 2014-04-18T23:00:25.773 回答