数据库分词查询的优缺点以及英文和中文各自的分词方法(一)
1.为什么需要数据库分词查询
假设有一个数据库表,表中有一个title字段
table1 假如有300万的数据
id为主键,title也设置了索引
id | title |
1 | 这是计算机,和计算机相关,电脑相关 |
2 | 这个标题是数据库,与专利数据库有关系 |
3 | 这个标题是与淘宝user数据库 |
... | ................................................... |
假如我们需要通过title中的某些字段去进行查询,如果不分词查询,那么这样的缺点如下
- 查询速度上的问题,如果我们 想查询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
|
select * from table where id in(select id from keywordsearch1 where keyword='数据库')
或者程序中,先在分词表中查询出id,再用一个for循环,循环select * from table where id =xxx
这样一来,查询都是有索引的,速度会非常的迅速.速度问题解决了
2. 对于准确度问题,比如搜索
专利的数据库
程序会先和分词的方法一样,将其分成
专利、数据库 我们查询的时候
就分别keywordsearch1表去查询这两个对应的id,取得他们的交集,然后再根据id去主表中查询相应的数据,这样,就保证了我们能够得到我们想要的数据了