数据库分词查询的优缺点以及英文和中文各自的分词方法(一)

来源:互联网 发布:sqlserver 数据备份 编辑:程序博客网 时间:2024/04/25 19:40
1.为什么需要数据库分词查询
 假设有一个数据库表,表中有一个title字段
table1 假如有300万的数据
id为主键,title也设置了索引
idtitle1这是计算机,和计算机相关,电脑相关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去主表中查询相应的数据,这样,就保证了我们能够得到我们想要的数据了

更多内容,看下一章节











2 1
原创粉丝点击