在MySQL 5.7.6之前,全文索引仅支持英文全文索引,而不支持中文全文索引。为解决此问题,需先对中文文本进行分词,将其拆分成单词后存入数据库。MySQL 5.7.6版本之后,内置了ngram全文解析器,用于支持中文、日文、韩文分词。在本文中,我们将使用MySQL版本5.7.22和InnoDB数据库引擎。全文索引的使用场...
mysql全文查找matchagainst模式怎样实现中文多词模糊
在MySQL 5.7.6之前,全文索引仅支持英文全文索引,而不支持中文全文索引。为解决此问题,需先对中文文本进行分词,将其拆分成单词后存入数据库。MySQL 5.7.6版本之后,内置了ngram全文解析器,用于支持中文、日文、韩文分词。在本文中,我们将使用MySQL版本5.7.22和InnoDB数据库引擎。
全文索引的使用场景通常在大量数据搜索效率低下时,如超过10万条数据或在线人数过多时,like查询会导致数据库崩溃。而全文索引则能对整篇文章预先按照词进行索引,大大提高查询效率,尤其适合百万级数据检索。
如果你使用的是自建服务器,应立即设置全文索引,充分利用这一功能。创建倒排索引时,务必在语句中加上WITH PARSER ngram,并尝试一次创建多个字段的倒排索引,以避免出现“找不到倒排索引”的问题。
MySQL原生的ngram解析器通过全局变量ngram_token_size配置n的大小,取值范围为1到10,默认值为2。通常设置为要查询的单词的最小字数。若需查询单字,则将ngram_token_size设置为1。ngram_token_size值越小,全文索引占用的空间越小。但查询时,速度最快的情况是正好等于ngram_token_size的词。
修改ngram_token_size值的方法是在my.ini文件的[mysqld]下添加ngram_token_size = 2,或在Linux系统的my.cnf文件中进行修改。修改后需重启MySQL服务,重新建立倒排索引以确保生效。
MySQL的全文检索语句包括自然语言检索(IN NATURAL LANGUAGE MODE)、布尔检索(IN BOOLEAN MODE)和查询扩展检索(WITH QUERY EXPANSION)三种方式。自然语言检索考虑所有可能的词组合;布尔检索排除一半匹配行以上的词,提高效率;查询扩展检索则在特定条件下扩展查询结果。
检索时,可使用如下检索方式:
IN NATURAL LANGUAGE MODE:查询包含多个词的所有组合。IN BOOLEAN MODE:通过布尔逻辑符AND、OR、NOT、>、<、~和*进行高级查询。举例:
IN BOOLEAN MODE:"+apple -banana"表示返回必须包含apple且不包含banana的记录。"apple banana"表示返回至少包含apple或banana的记录。"+apple banana"表示返回必须包含apple且banana可包含或不包含,若包含则获得更高权重的记录。"+apple ~banana"表示返回必须包含apple且包含banana会降低权重的记录。全文搜索时需注意以下几点:
全文索引默认按照id从高到低排序。在进行爬虫数据采集时,可利用全文索引提高检索效率。在使用全文索引时,应合理配置ngram_token_size等参数,以优化查询效率和性能。通过正确配置和利用全文索引,可显著提升数据检索的效率和效果。
2024-08-27