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

问题描述 投票:0回答:2

我对这篇文章有疑问: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 full-text-search
2个回答
27
投票

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


0
投票

它的用途是什么?

据我所知,全文索引启用的方法可以帮助提供更有用的搜索结果,包括:

  • 结果按相关性排序
  • 单个单词匹配:使用OR条件(这会产生更多结果,这是可以的,因为更相关的结果将位于顶部)。
  • 布尔模式:向查询的每个部分添加ANDNOT条件(使用修饰符
    +
    -
  • 查询扩展:通过执行第二次搜索,添加“第一次搜索中的少数几个最相关的文档”来产生更多结果。
  • 忽略较小的单词:忽略少于 3 个字符的单词
  • 忽略常用词:这些词在“停用词”列表中配置。

它似乎与较大文本主体(例如文章)上的用户搜索最相关,但对于查询较小字段(例如记录名称)也很有用。

参考:https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html

© www.soinside.com 2019 - 2024. All rights reserved.