我对这篇文章有疑问: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可以提供一个定义吗?它是如何运作的?
MySQL 的自然语言全文搜索旨在将搜索查询与语料库进行匹配,以找到最相关的匹配项。因此,假设我们有一篇包含“我喜欢馅饼”的文章,并且我们有文档 d1、d2、d3(您案例中的数据库)。文档1和2分别是关于体育和宗教的,文档3是关于食物的。您的询问,
SELECT * FROM 文章 WHERE MATCH (标题,正文) AGAINST ('数据库' IN 自然语言模式);
将返回 d3,然后返回 d2、d1(d2、d1 的随机顺序,具体取决于哪个更等于文章),因为 d3 与文章最匹配。
MYSQL使用的底层算法大概是tf-idf算法,其中tf代表词频,idf代表逆文档频率。 tf 顾名思义,就是 Article 中的单词 w 在 A 文档中出现的次数。 idf 基于该单词在文档中出现的数量。因此,许多文档中出现的单词无助于确定最具代表性的文档。 tf*idf 的乘积产生一个分数,分数越高,该单词越好地代表文档。因此“pie”只会出现在文档 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 的。
它的用途是什么?
据我所知,全文索引启用的方法可以帮助提供更有用的搜索结果,包括:
+
和-
)它似乎与较大文本主体(例如文章)上的用户搜索最相关,但对于查询较小字段(例如记录名称)也很有用。
参考:https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html