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


    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去主表中查询相应的数据,这样,就保证了我们能够得到我们想要的数据了
  • 相关阅读:
    异常处理的讨论 CQ
    看看这个Lock可不可靠 CQ
    Smart Client Software Factory(SCSF) 之起步 CQ
    建设高性能网站
    关系数据库还是NoSQL数据库
    另类递归
    cacti监控redis状态
    NoSQL书籍大全
    如果判断function的调用者?
    Error while creating db diagram:Cannot insert NULL into column diagram_id
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/9272737.html
Copyright © 2020-2023  润新知