搜索引擎背後的原理和中文日誌檢索
摘要: 日誌服務支持的兩種搜索方式 通過設置分詞字元(通常是標點符號),把一段文本劃分成不同的單詞。分詞字元只能是單位元組ascii字元這種方式適合於切分英文單詞。這種方式對於中文日誌,必須要搜索中文語句整體。
原文:http://click.aliyun.com/m/42996/
搜索引擎背後的原理和日誌檢索
當我們在搜索引擎搜索一個詞的時候,背後是上千台機器在為我們工作。那麼搜索引擎是如何從數萬億的網頁中瞬間查找到我們想要的詞的呢?這裡要介紹一個概念叫倒排索引。
倒排索引
倒排索引指的是,把文檔拆分成一個個單詞,每個單詞指向包含該單詞的文檔ID。在查詢時,根據關鍵字,找到包含該關鍵字的文檔ID列表。再根據ID讀取具體的數據。
以英文為例,下面是要被索引的文本:
T0 = "it is what it is"
T1 = "what is it"
T2 = "it is a banana"
我們就能得到下面的反向文件索引:

查詢what這個詞時,我們找到了0,1這兩個ID,然後知道了T0和T1這兩個文檔包含what這個詞。
由上文的介紹可知,創建倒排索引的關鍵在於分詞。對於英文和中文,分詞方式又有區別。
英文分詞
英文語句,每個單詞之間有標點符號分割,因此我們把標點符號設置為分詞字元,標點符號之間的字元串即為一個單詞。
例如語句

- 如果分詞字元是空格和. ? ! 那麼能夠得到的單詞依次是
it,is,what,it,is,what,is,it,it,is,a,banana - 如果分詞字元是空格和.? 不包含! 那麼能夠得到的單詞依次是
it,is,what,it,is,what,is,it,it,is,a,banana!我們得到banana!這樣一個特殊的詞,在查詢時如果查詢banana是無結果的,比如查詢banana!才行
配置分詞字元,請在查詢分析屬性中配置:

中文分詞
中文分詞的困難
中文語句不同於英文語句,英文的每個單詞之間有標點符號分割,中文的單詞和單詞之間是連接在一起的。中文單個字沒有意義,只有和相鄰的字組成辭彙時,才有意義。例如語句:

每個字表達的含義沒有意義,只有組合成辭彙,才能理解其中的含義。中文博大精深,不同的字有不同的組合方式,在不同的語境下,詞的長度也不一樣。人類能夠快速的分析出這句話所包含的詞:
中國 是 一個 偉大 的 國家 中國共產黨 是 一個 偉大 的 政黨
兩句話中的中國,在前一句中是單獨一個詞,在後一句中要和之後的共產黨組成一個詞。
中英文混合日誌
針對包含中文的日誌,例如日誌:

其中冒號是中文冒號,配置的分詞字元是空格。如果只採用分詞字元的方式分詞,那麼得到的詞有:
debug message:登錄成功
無法單獨搜索登錄或成功,只有完整輸入message:登錄成功才能搜索到日誌。
智能化中文分詞
為了解決中文的分詞問題,我們引入了智能化的分詞演算法。

如果日誌中包含中文,那麼需要打開開關,引入智能化分詞,才能夠搜索中文單詞。
打開後中文開關後,我們分別可以查詢debug,message,登錄,成功。
中文搜索效果:

阿里雲日誌服務存儲資源包
阿里雲日誌服務存儲資源包全新上線,限時優惠59元起,詳情請戳:https://promotion.aliyun.com/ntms/act/season-cloudproduct.html
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
推薦閱讀:
