1. 程式人生 > >資料庫分詞查詢的優缺點以及英文和中文各自的分詞方法(一)

資料庫分詞查詢的優缺點以及英文和中文各自的分詞方法(一)

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去主表中查詢相應的資料,這樣,就保證了我們能夠得到我們想要的資料了 更多內容,看下一章節