MySQL模糊查询再也用不着 like+%

news/2024/7/19 19:18:05 标签: mysql, 全文检索, 搜索引擎

# 前言

我们都知道 InnoDB 在模糊查询数据时使用 "%xx" 会导致索引失效,但有时需求就是如此,类似这样的需求还有很多,例如,搜索引擎需要根基用户数据的关键字进行全文查找,电子商务网站需要根据用户的查询条件,在可能需要在商品的详细介绍中进行查找,这些都不是B+树索引能很好完成的工作。

通过数值比较,范围过滤等就可以完成绝大多数我们需要的查询了。但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较,全文索引就是为这种场景设计的。

全文索引(Full-Text Search)是将存储于数据库中的整本书或整篇文章中的任意信息查找出来的技术。它可以根据需要获得全文中有关章、节、段、句、词等信息,也可以进行各种统计和分析。

在早期的 MySQL 中,InnoDB 并不支持全文检索技术,从 MySQL 5.6 开始,InnoDB 开始支持全文检索

# 倒排索引

全文检索通常使用倒排索引(inverted index)来实现,倒排索引同 B+Tree 一样,也是一种索引结构。它在辅助表中存储了单词与单词自身在一个或多个文档中所在位置之间的映射,这通常利用关联数组实现,拥有两种表现形式:

  • inverted file index:{单词,单词所在文档的id}

  • full inverted index:{单词,(单词所在文档的id


http://www.niftyadmin.cn/n/1334152.html

相关文章

OpenCV手势识别

软硬兼环境ubuntu 18.04 64bitanaconda with python 3.7nivdia gtx 1070Tiopencv 4.2.0前言本文中使用的算法模型是CMU Perceptual Computing Lab开源的集合人体、人脸、手部关键点检测的开源库OpenPose,这个项目前文已经介绍过了。本文会在OpenCV中使用dnn模块调用…

第一次提交到gitlab

idea第一次上传代码到gitlab_lmiao1992的博客-CSDN博客_gitlab第一次上传代码 创建一个群组,下面可以创建项目,此处我创建了一个sell的群组,在群组下创建了一个sell的项目。 2.在idea中工具栏的VCS中选择导入项目到版本控制器,选…

Flask教程(二十四)请求转发

软硬件环境windows 10 64bitanaconda3 with python 3.7flask 1.1.2前言在某些情况下,我们需要在flask中进行http请求的转发,也就是让flask成为http代理。本文借助流行的http请求库requests来实现。代码示例from flask import Flask import requestsapp …

OpenCV中使用Mask R-CNN进行实例分割

软硬兼环境windows 10 64bitnivdia gtx 1066opencv 4.4.0简介Mask R-CNN是在原有的R-CNN基础上实现了区域ROI的像素级别分割。tensorflow框架有个扩展模块叫做models,里面包含了很多预训练的网络模型,提供给开发者直接使用或者迁移学习使用,t…

第一次上传项目到git

简易的命令行入门教程: Git 全局设置: git config --global user.name "SoLucky2017" git config --global user.email "ssllkkyy126.com" 创建 git 仓库: mkdir test123 cd test123 git init touch README.md git add README.md git commit -m "…

Python实用模块(二十七)requests

软硬件环境windows 10 64bitsanaconda with python 3.7requests 2.25.0简介requests是用来在Python中进行标准HTTP请求的第三方库。它将请求背后的复杂性抽象成一个漂亮,简单的API,以便你可以专注于与服务交互和在应用程序中使用数据。安装使用pip进行安…

OpenCV检测性别年龄

软硬兼环境windows 10 64bitanaconda with python 3.7nivdia gtx 1066opencv 4.2.0原理分别使用人脸、性别、年龄模型,使用opencv中的dnn模块来预测图片或者视频中人物的性别和年龄。模型已经打包好了,自行下载百度盘链接:https://pan.baidu.…

codeformat.xml codetemplate.xml

<?xml version"1.0" encoding"UTF-8" standalone"no"?> <profiles version"11"> <profile kind"CodeFormatterProfile" name"Opermonitor Format" version"11"> <setting id&qu…