MySQL 5.7.6的ngram全文检索与关键词跑分实战

版权申诉
0 下载量 61 浏览量 更新于2024-09-11 1 收藏 228KB PDF 举报
本文主要介绍了如何在MySQL中实现全文检索和关键词跑分的功能,特别是针对5.7.6版本及之后引入的ngram全文解析器,适用于中文、日文和韩文的分词处理。 一、全文检索背景与MySQL全文索引 在遇到需要快速全文搜索但又无法使用专门搜索引擎如ElasticSearch的场景时,MySQL的全文检索功能就显得尤为重要。自5.7.6版本起,MySQL内置了ngram全文解析器,解决了对中文等非英文字符的全文索引问题。在早期版本中,对于中文全文索引,开发者通常需要借助外部分词工具预先处理数据。 二、ngram全文解析器 1. ngram概念:ngram是连续n个字符的序列,用于分词。例如,对于字符串“你好世界”,当n=2时,分词结果为“你好”、“好世”、“世界”。 2. 配置参数:`ngram_token_size`控制n的大小,范围1到10,默认值2。设置为1可支持单字搜索,而2更适合中文单词,因为通常中文单词由两个或更多汉字组成。 3. 设置方法:可以通过启动mysqld时指定或修改配置文件来调整`ngram_token_size`的值。 三、创建全文索引 以一个文书数据表为例,可以按照以下步骤创建全文索引: 1. 建表时创建全文索引:在创建表`t_wenshu`时,为包含文书内容的字段添加全文索引,如`CREATE TABLE t_wenshu (...) FULLTEXT INDEX idx_content (content);` 2. 导入数据:向表中导入10w条测试数据,以便进行全文检索测试。 四、关键词跑分 1. 使用`MATCH...AGAINST`语句进行全文搜索和跑分:如`SELECT * FROM t_wenshu WHERE MATCH(content) AGAINST('关键词');`,`MATCH()`函数用于指定全文索引字段,`AGAINST()`则包含搜索的关键词。 2. `IN BOOLEAN MODE`:添加此选项可启用布尔模式搜索,允许使用加号(+)、减号(-)等操作符来提高或降低特定关键词的重要性。 3. `WITH QUERY EXPANSION`:启用查询扩展功能,会基于初始搜索结果返回相关的额外结果。 五、优化全文检索 1. 确保索引字段内容是合适的大小写,因为MySQL全文检索不区分大小写。 2. 考虑使用`ALTER TABLE ... OPTIMIZE TABLE`优化表,以更新索引并提高搜索性能。 3. 调整`ft_min_word_len`系统变量,控制被索引的最短单词长度,以包含更多词汇。 4. 使用`FT stopwords`(停止词)列表排除常见无意义词汇,提高搜索效率。 总结来说,MySQL的全文检索功能虽然不及专门的搜索引擎强大,但在数据量不大、时间紧迫的情况下,能提供一种快速实现全文搜索的解决方案。通过正确配置ngram全文解析器和建立全文索引,结合关键词跑分技术,可以在MySQL中实现基本的全文检索需求。