陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2169,comments - 570,views - 413万

1.为什么需要数据库分词查询

 假设有一个数据库表,表中有一个title字段
table1 假如有300万的数据
id为主键,title也设置了索引
id title
1 这是计算机,和计算机相关,电脑相关
2 这个标题是数据库,与专利数据库有关系
3 这个标题是与淘宝user数据库
... ...................................................

假如我们需要通过title中的某些字段去进行查询,如果不分词查询,那么这样的缺点如下
  1. 查询速度上的问题,如果我们 想查询title中 有 数据库 的字段的所有内容
我们只能用   select * from table1 where title like '%数据库%'
         注意: like %xxx% 这样查询,将会是没有索引的查询,查询的速度会非常的慢,40万的数据,这样查询需要的时间是用 = 查询的几千倍
使用like'%%' 速度非常慢,在需要大量查询的时候,性能上会出现很大的问题
           2. 查询的准确性问题,假如我们想查询有 专利数据库 的字段,但是,我们如果打错了,打成了查询 '专利的数据库',多了一个'的'字,
    查询的sql 语句为 select * from table1 where title like '专利的数据库' 
  这样,我们是查询不到id=2的这一条数据的
如果使用分词查询,上述问题将会得到解决
我们将关键字进行分词,建立关键字与id的关系,同时建立索引
比如我们将title进行分词,得到如下的表(注:下表我只列出id=2的分词部分)
keywordsearch1表 id为主键,keyword设置索引
id
keyword
......
xxxxxxx
2
标题
2
数据库
2
专利
2
关系
.......
xxxxxxxxx
1. 我们如果要查询tutle中有数据库的。可以直接用
select * from table where id in(select id from keywordsearch1 where keyword='数据库')
或者程序中,先在分词表中查询出id,再用一个for循环,循环select * from table where id =xxx
这样一来,查询都是有索引的,速度会非常的迅速.速度问题解决了
2. 对于准确度问题,比如搜索 专利的数据库
程序会先和分词的方法一样,将其分成 专利、数据库 我们查询的时候
就分别keywordsearch1表去查询这两个对应的id,取得他们的交集,然后再根据id去主表中查询相应的数据,这样,就保证了我们能够得到我们想要的数据了
posted on   宏宇  阅读(2317)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
历史上的今天:
2010-07-06 远程桌面、远程控制的实现原理
2009-07-06 shtml我几乎要忘了的东西
2007-07-06 什么是CMS系统
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示