SOLR--7--傳統關係型數據庫在全文檢索中的劣勢

 

例子描述:數據庫

搜索和「buying a home」相關的書。微信

數據庫中有一個Book表,存在下圖9條記錄測試

(圖一 與」buying a home"相關的book name 6條)排序

(圖二 與"buying a home"不相關的book name 3條)索引

 

當咱們在輸入框輸入buying a home的時候,指望結果是搜出圖一中的6條數據。如下使用SQL進行查詢測試。文檔

 

1,使用 = 匹配字符串

 

SELECT * FROM Books搜索

        WHERE Name = 'buying new home';im

 

無查詢結果數據

 

SELECT * FROM Books

        WHERE Name = 'buying a new home';

 

查到一條記錄

 

2, 使用like進行模糊匹配,and鏈接的結果

 

SELECT * FROM Books

        WHERE Name LIKE '%buying%'

            AND Name LIKE '%a%'

            AND Name LIKE '%home%';

 

仍然只查詢到了一條相關記錄

 

3,使用like進行模糊匹配,or鏈接

 

SELECT * FROM Books

        WHERE Name LIKE ‘%buying%’

               OR Name LIKE ‘%a%’

               OR Name LIKE ‘%home%’;

 

顯然不少不相關的book被查詢了出來

使用傳統的關係型數據庫進行查詢,咱們發現主要存在如下問題:

 

1,只可以進行子字符串的匹配查詢。如上例中,只能對查詢詞分開來進行匹配查詢,若是使用「=」進行匹配不少相關的文檔沒有被檢索出來。

 

2,沒法區分語言學上的變化。這裏指buy到buying的變化(中文不存在這種問題)。

 

3,同義詞沒法區分。buying和purchasing都有購買的意思,可是數據庫的匹配查詢沒法認爲他們是同樣的。

 

4,不重要的詞仍然被做爲查詢條件進行查詢。這裏指查詢 a 也做爲了一個條件。同理中文查詢中「的」這種無心義的詞在查詢時也不該包含。

 

5,沒有相關性的排序。從上圖的查詢結果看,不相關的內容卻被排到了前面。這個順序依賴於數據庫的內部順序。

 

當這個表的數據逐漸變大的時候,like查詢的匹配會很是慢,即便在有索引的狀況下。何況關係型數據庫也不該該對文本字段進行索引(感興趣的同窗能夠了解一下數據庫的索引建立過程)。

 

根據以上的實驗得出結論:關係型數據庫不適合全文檢索。

 

更多內容可關注微信公衆號,金沙數據

相關文章
相關標籤/搜索