mysql全文索引

news2024/11/18 4:35:16

引用:https://www.cnblogs.com/miracle-luna/p/11147859.html

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

ngram全文解析器

ngram一段文字里面连续的n个字的序列
ngram全文解析器能够对文本进行分词,,每个单词是连续的n 个字的序列
例如: 用ngram全文解析器对 “恭喜发财” 进行分词:

n=1: '恭', '喜', '发', '财' 
n=2: '恭喜', '喜发', '发财' 
n=3: '恭喜发', '喜发财' 
n=4: '恭喜发财'

全局变量ngram_token_size : 分词大小,默认2

show variables like 'ngram_token_size'

可以修改mysql配置文件my.ini,在末尾增加一行 ngram_token_size=2

重启mysql服务:

net stop mysql
net start mysql

重启之后刷新表的索引:

repair table 表名 quick

创建全文索引:

创建表的时候创建中文的全文索引

create table hehe1 (
    id int not null ,
    note_text text null,
    primary key (id)
    # 使用ngram中文解析器
    fulltext (note_text) with parser ngram
) character set utf8

或者使用命令创建全文索引:

alter table 表名 add fulltext index 索引名(要索引的那个字段) with parser ngram
alter table hehe1 add fulltext index hehehe(note_text) with parser ngram
使用全文检索

match() : 指定被搜索的列
navigat(): 要使用的搜索表达式

select * from hehe1 where match(note_text) against('我爱学习' in natural language mode )
select *, match(note_text) against('学习 傻逼' in boolean mode ) as score from hehe1 where match(note_text) against('学习 傻逼' in boolean mode )
全文检索模式
  1. 自然语言模式 natural language mode
    是mysql的默认全文检索模式,,
    自然语言模式不能使用操作符,不能指定关键词必须出现或者必须不能出现 等 复杂查询

  2. 布尔模式 boolean mode
    可以使用操作符,,可以支持指定关键词必须出现,,或者必须不能出现,,权重高还是低等 复杂查询

    • 要匹配的词
    • 要排斥的词: 某行包含这个词,则不返回该行,即使它包含其他指定词也是如此
    • 排列提示 : 值某些词比其他词 更重要,,更重要的词等级更高
    • 表达式分组???、

布尔方式,即使没有定义fulltext索引,,也可以使用它,,但这是一种非常缓慢的操作(其性能随着数据量的增加而降低)
在这里插入图片描述

'apple banana' 
无操作符,表示或,要么包含apple,要么包含banana

'+apple +juice'
必须同时包含两个词

'+apple macintosh'
必须包含apple,但是如果也包含macintosh的话,相关性会更高。

'+apple -macintosh'
必须包含apple,同时不能包含macintosh。

  1. 查询扩展
    在使用查询扩展时,mysql对数据和索引,,进行两遍扫描来完成搜索:
    • 首先进行一个基本的全文搜索,找出与搜索条件匹配的所有行
    • 其次,mysql检查这些匹配行,,并选择所有有用的词,(mysql如何判定什么有用,什么无用???)
    • 最后,mysql进行全文本搜索,,不仅使用原来的条件,,而且还是用所有有用的词
# 会输出更多的查询项  with query expansion
select * from hehe1 where match(note_text) against('学习' with query expansion )
注意
  1. 在索引全文本数据时,短词被忽略且从索引中排除,,设置分词长度
  2. mysql带有一个内建的非用词stopword列表,,这些词在索引全文本数据时,,总是被忽略,如果需要,,可以覆盖这个列表
  3. 如果到导入大数据集,,先导入数据,再在表上创建全文索引,,,定义fulltext索引之后,mysql会自动维护该索引,,在,增加,,更新,,或者删除 行的时候,索引随之更新,,,所以不要在导入数据时使用 fulltext,,更新索引要花时间

问题:

#修改表字段的字符集
alter table productnotes modify note_text text character set utf8
#查看mysql版本
select version()

全文检索fulltext搜索不到内容:
查看全文检索配置:

# 查看英文搜索最小单词:`ft_min_word_len`
show variable like 'ft%'

ft_min_word_len改为1,,,在mysql配置文件中修改,并重启

# 快速重建表格  repair只适用于MyISAM
repair table article quick;

引用:https://www.zhangbj.com/p/64.html


like 和 regexp 虽然这些搜索机制非常有用,但存在几个重要的限制:

  • 性能 — 通配符和正则表达式匹配通常要求mysql尝试匹配表中的所有行,,这些搜索极少使用表索引,,,由于搜索行数不断增加,,这些搜索可能非常耗时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/29961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FSK/OOK 调制单发射芯片CMT2119A-ESR/CMT2119B-EQR

FSK/OOK 调制单发射芯片CMT2119A-ESR/CMT2119B-EQR CMT2119A 是 HopeRF 旗下CMOSTEK 无线产品线 FSK/OOK 调制单发射芯片,CMT2219A 则是与之对应的 FSK/OOK 调制单接收芯片,均支持 Sub-1G 应用无线发射芯片CMT2119A主要应用: 无线遥控开关、…

接口设计与优化

文章目录接口的注意事项获取对象的属性或方法,先 判断对象是否为空!修改老接口,思考接口的兼容性重点接口,考虑线程池隔离调用第三方接口考虑超时、重试接口的熔断、降级接口,需要考虑限流接口要打印好日志接口考虑热点…

ETF动量轮动+RSRS择时,RSRS修正标准分,回撤降至16%

原创文章第113篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。 昨天的策略我是比较满意的,沿着进化的方向在迭代我们的策略。ETF轮动RSRS择时,加上卡曼滤波:年化48.41%,夏普比1.89 我们会持…

Linux从入门到精通(十)——进程管理

文章篇幅较长,建议先收藏,防止迷路 文章跳转Linux从入门到精通(八)——Linux磁盘管理goLinux从入门到精通(九)——Linux编程goLinux从入门到精通(十)——进程管理goLinux从入门到精…

Go Web项目 接口开发全流程

风离不摆烂学习日志 Day5 — Go Web项目 接口开发全流程 接上篇地址 Web项目学习之项目结构 routes包分析 InitRoutes package routesimport ("fmt""github.com/gin-gonic/gin""go-web-mini/common""go-web-mini/config""go-we…

Charles断点

1、断点测试的含义 1.1、断点(英语:Breakpoint)是程序中为了调试而故意停止或者暂停的地方。 调试设置断点:可以让程序运行到该行程序时停住,借此观察程序到断点位置时,其变量、寄存器、I/O等相关的变量内…

mysql InnoDB 索引结构

目录 前言 1. InnoDB常见的索引 2. B树索引 2.1 二分查找法 2.2 二叉查找树 2.3 平衡二叉树 2.4 B树索引 2.5 B树索引 2.5.1 聚集索引 2.5.2 非聚集索引 2.5.3 聚集索引与非聚集索引区别 前言 索引的本质是让mysql以最高效、扫描行数最少的方式找到需要的数据。索引…

Paper写作怎么了解题目方面的重要性?

我们常听到:Paper的好坏,从选择题目开始!可见选择Paper题目的重要性。这正是我们今天要探讨的内容。 We often hear that the quality of paper starts from choosing the topic!This shows the importance of selecting paper topics.This i…

数字信号处理-9-离散余弦变换

1 波形合成 假定给一系列振幅和一系列频率,要求构建一个信号,此信号是这些频率元素的和。这样的操作就是合成 def synthesize(amps, fs, ts):"""amps 振幅数组fs 频率数组ts 采样时间点"""# ts 和 fs 的外积&#xff0c…

Spring Cloud(十三):Spring 扩展

Spring扩展点 Bean的生命周期中的BeanPostProcessor扩展点Spring扩展点梳理 Spring扩展点应用场景 整合Nacos 服务注册 ApplicationListener扩展场景——监听容器中发布的事件Lifecycle Nacos 发布订阅 & Eureka 服务启动、同步、剔除Lifecycle扩展场景——管理具有启动、停…

JSP快速入门

目录 1、jsp简述 2、JSP快速入门 2.1、搭建环境 2.2、导入JSP页面 2.3、编写代码 2.4、启动测试 3、JSP原理 4、JSP脚本 4.1、JSP脚本的分类 4.2、案例 4.2.1、需求 4.2.2、实现 ​编辑 4.2.3、测试 ​编辑4.3、JSP缺点 5、JSP语法 5.1、JSP页面的基本结构…

【每日一题Day36】LC1742盒子中小球的最大数量 | 哈希表 找规律

盒子中小球的最大数量【LC1742】 You are working in a ball factory where you have n balls numbered from lowLimit up to highLimit inclusive (i.e., n highLimit - lowLimit 1), and an infinite number of boxes numbered from 1 to infinity. Your job at this facto…

[附源码]java毕业设计养老院管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

C++ 语言学习 day10 复习(2)

1.友元 的三种形式 /*********** 友元 ************ * ①全局函数做友元 * ②类做友元 * ③类成员函数做友元 * **************************/ 代码&#xff1a; #include <iostream> #include <string> using namespace std;/* ③类函数友元 : 程序规则{ 自上…

Charles下载抓包基本流程

一、Charles官网下载链接&#xff1a; https://www.charlesproxy.com/download/ 二、抓包步骤&#xff1a; 1、安装Charles&#xff0c;并打开 2、电脑设置代理端口&#xff1a; 打开charles->Proxy->Proxy Settings,设置代理端口&#xff0c;如图所示 3、手机设置代…

Day10--配置uni-app的开发环境

1.啥子是ui-app呢&#xff1f; 1》官方介绍&#xff1a; 2》博主介绍 ************************************************************************************************************** 2.开发工具建议使用HBuilder X *************************************************…

BSA/HSA表面修饰二甘醇酐,人血清白蛋白HSA、牛血清白蛋白BSA偶联二甘醇酐

BSA作用&#xff1a; BSA一般做为稳定剂被用于限制酶或者修饰酶的保存溶液和反应液中&#xff0c;因为有些酶在低浓度下不稳定或活性低。加入BSA后&#xff0c;它可能起到“保护”或“载体”作用&#xff0c;不少酶类添加 BSA后能使其活性大幅度提高。不需要加BSA的酶加入BSA一…

【时序预测-SVM】基于鲸鱼算法优化支持向量机SVM实现时序数据预测附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

【数据结构】二叉树详解(上篇)

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《数据结构》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; 二叉树&…

18 【Redux Toolkit】

18 【Redux Toolkit】 上边的案例我们一直在使用Redux核心库来使用Redux&#xff0c;除了Redux核心库外Redux还为我们提供了一种使用Redux的方式——Redux Toolkit。它的名字起的非常直白&#xff0c;Redux工具包&#xff0c;简称RTK。RTK可以帮助我们处理使用Redux过程中的重…