我有一个关于这篇文章的问题: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能提供一个定义吗?它是如何工作的?
我有一个关于这篇文章的问题: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能提供一个定义吗?它是如何工作的?
1条答案
按热度按时间abithluo1#
MySQL的自然语言全文搜索旨在将搜索查询与语料库进行匹配,以找到最相关的匹配项。因此,假设我们有一篇包含“I love pie”的文章,并且我们有文档d1、d2、d3(在您的示例中为数据库)。文档1和2分别与体育和宗教有关,文档3与食物有关。您的查询
SELECT * FROM文章WHERE MATCH(标题,正文)AGAINST(自然语言模式下的'数据库');
将返回d3,然后返回d2、d1(d2、d1的随机顺序取决于哪个更等于文章),因为d3与文章最匹配。
MYSQL使用的底层算法可能是tf-idf算法,其中tf代表术语频率,idf代表反向文档频率。tf正如它所说,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_为InnoDB搜索索引启用停止字、innodb_ft_server_stopword_table和innodb_ft_user_stopword_table,为MyISAM搜索索引启用ft_stopword_file。