首页 > 数据库 >【IT老齐055】Mysql Ngram全文检索技术

【IT老齐055】Mysql Ngram全文检索技术

时间:2024-03-26 15:33:34浏览次数:27  
标签:apple 老齐 全文索引 Ngram 全文检索 ngram MySQL macintosh

【IT老齐055】Mysql Ngram全文检索技术

场景

  • select * from article where title like Java%
    • 可能用到索引,看索引选择性

  • select * from article where titledlike %Java
    • 一定不会用到索引

  • select * from article where title like%Java%
    • 一定不会用到索引

解决方案

搜索引擎

1710855349332

  • 更高的成本
  • 数据一致性如何保证
  • ElasticSearch高可用架构采用方案
  • 维护ElasticSearch

Mysql Ngram

在 MySQL 5.7.6 之前,全文索引只支持英文全文索引,不支持中文全文索引,需要利用分词器把中文段落预处理拆分成单词,然后存入数据库。
从 MySQL 5.7.6 开始,MySQL内置了ngram全文解析器,用来支持中文、日文、韩文分词

ngram全文解析器

ngram就是一段文字里面连续的n个字的序列。
ngram全文解析器能够对文本进行分词,每个单词是连续的n个字的序列。

MySQL 中使用全局变量 ngram_token_size 来配置 ngram 中 n 的大小,它的取值范围是1到10,默认值是 2。通常nqram token size设置为要查询的单词的最小字数。如果需要搜索单字,就要把ngram_token_size设置为1。在默认值是2的情况下,搜索单字是得不到任何结果的。因为中文单词最少是两个汉字,推荐使用默认值2。

使用方式

  • 指定分词大小
    • 使用启动命令 mysqld 时,添加参数 mysqld --ngram token size=2
    • 修改MySQL配置文件 my.ini ,末尾增加一行 ngram_token_size 参数设置
  • 创建索引
    • ALTER TABLE my_table ADD FULLTEXT (content);
  • where子句
    • where MATCH(content) AGAINST ('target' IN NATURAL LANGUAGE MODE);

全文检索模式

  • 自然语言模式(NATURAL LANGUAGE MODE)
    • 自然语言模式是 MySQL 默认的全文检索模式。
    • 自然语言模式不能使用操作符,不能指定关键词必须出现或者必须不能出现等复杂查询。
  • BOOLEAN 模式(BOOLEAN MODE)
    • BOOLEAN 模式可以使用操作符,可以支持指定关键词必须出现或者必须不能出现或者关键词的权重高还是低等复杂查询。
apple banana
无操作符,表示或,要么包含apple,要么包含banana
+apple +juice
必须同时包含两个词
+apple macintosh
必须包含apple,但是如果也包含macintosh的话,相关性会更高
+apple -macintosh
必须包含apple,同时不能包含macintosh。
+apple ~macintosh
必须包含apple,但是如果也包含macintosh的话,相关性要比不包含macintosh的记录低。
+apple +(>juice <pie)
查询必须包含apple和juice或者apple和pie的记录,但是apple juice的相关性要比apple pie高
apple*i
查询包含以apple开头的单词的记录,如apple、apples、applet
"some words"
使用双引号把要搜素的词括起来,效果类似于like%some words%'

注意

  • 只能在类型为 CHAR、VARCHAR 或者 TEXT 的字段上创建全文索引。
  • 全文索引只支持 InnoDB 和 MyISAM 引擎。
  • MATCH (columnName) AGAINST(keywords)。MATCH)函数使用的字段名,必须要与创建全文索引时指定的字段名一致。
  • MATCHO函数使用的字段名只能是同一个表的字段,因为全文索引不能够跨多个表进行检索
  • 如果要导入大数据集,使用先导入数据,再在表上创建全文索引的方式,要比先在表上创建全文索引再导入数据的方式快很多

标签:apple,老齐,全文索引,Ngram,全文检索,ngram,MySQL,macintosh
From: https://www.cnblogs.com/faetbwac/p/18096786

相关文章

  • 【IT老齐056】日千万级订单系统的高可用、高性能架构
    【IT老齐056】日千万级订单系统的高可用、高性能架构原始场景避免丢单关键逻辑不要使用读写分离的查询方式,避免从库同步延迟造成订单查询异常关键逻辑也不要使用缓存来进行订单的查询订单补偿不要粗暴地使用消息队列的方式,避免中间件引发的订单丢失接收消息处理......
  • 【IT老齐045】RabbitMQ六种队列模式
    【IT老齐045】RabbitMQ六种队列模式前情提要Producer:生产者,消息的提供者Consumer:消费者,消息的使用者Broker:MQ服务器,管理队列、消息及相关信息Message:消息,程序间的通信的数据Queue:队列,消息存放的容器,消息先进先出Exchange:交换机,用于分发消息工作模式简单模式工作队列......
  • 【IT老齐047】避坑UUID主键
    【IT老齐047】避坑UUID主键场景财政部金财工程平台在代理行日终结算时,经常出现磁盘的IO异常,导致经常出现高延迟对比发现在大量数据新增时磁盘IO居高不下,多次测试后发现是UUID主键在搞鬼UUID基于时间的UUID能保证不同设备UUID是唯一的在同一设备上生成UUID可能重复DC......
  • 【IT老齐046】RabbitMQ队列解决消息积压问题
    【IT老齐046】RabbitMQ队列解决消息积压问题场景每天上午10点,全国2万多名客户经理集中录入上一日JK单据到BorrowSale系统,峰值能达到500单/s。但信审系统任务重,最多只支持到60单/s,每日会导致大量消息积压解决方案工作队列RabbitMQ改为工作队列模式,将消息送给9个信审系统实......
  • 【IT老齐048】Kafka高性能原因
    【IT老齐048】Kafka高性能磁盘顺序读写定期批量删除指定数据页缓存Kafka避免使用JVM,直接使用操作系统的页缓存特性提高处理速度,进而避免了JVMGC带来的性能损耗。Kafka采用字节紧密存储,避免产生对象,这样可以进一步提高空间利用率零拷贝批量操作......
  • 基于Java+Neo4j开发的知识图谱+全文检索的知识库管理系统(源码分析)
    在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编,企业知识共享库等。针对这些文档性的东西,手工纸质化去管理是非常消耗工作量的,并且纸质化查阅难,易损耗,所以电子化管理显得尤为重要。【springboot+elasticsearch+neo4j+vue+activiti】实现数字......
  • 基于Java+Neo4j开发的知识图谱+全文检索的知识库管理系统(源码分析)
    在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编,企业知识共享库等。针对这些文档性的东西,手工纸质化去管理是非常消耗工作量的,并且纸质化查阅难,易损耗,所以电子化管理显得尤为重要。【springboot+elasticsearch+neo4j+vue+activiti】实现数字......
  • ES--全文检索查询
    全文检索查询的基本流程如下:对用户搜索的内容做分词,得到词条根据词条去倒排索引库中匹配,得到文档id根据文档id找到文档,返回给用户比较常用的场景包括:商城的输入框搜索百度输入框搜索常见的全文检索查询包括:match查询:单字段查询multi_match查询:多字段查......
  • Ngram模型在机器翻译中的应用与挑战
    1.背景介绍机器翻译是自然语言处理领域的一个重要研究方向,其目标是将一种自然语言文本自动翻译成另一种自然语言文本。在过去的几十年里,机器翻译技术发展了很长一段时间,从基于规则的方法(如规则引擎和统计规则)开始,到基于模型的方法(如统计模型、深度学习模型等)发展。在这些方法中,N-gr......
  • 网络摄像头漏洞扫描工具 Ingram
    简介主要针对网络摄像头的漏洞扫描框架,目前已集成海康、大华、宇视、dlink等常见设备安装请在Linux或Mac系统使用,确保安装了3.8及以上版本的Python,尽量不要使用3.11,因为对许多包的兼容不是很好克隆该仓库:gitclonehttps://github.com/jorhelp/Ingram.git进入项目......