搜索引擎背后的原理和中文日志检索
摘要: 日志服務(wù)支持的兩種搜索方式 通過設(shè)置分詞字符(通常是標(biāo)點(diǎn)符號(hào)),把一段文本劃分成不同的單詞。分詞字符只能是單字節(jié)ascii字符這種方式適合于切分英文單詞。這種方式對(duì)于中文日志,必須要搜索中文語句整體。
點(diǎn)此查看原文:http://click.aliyun.com/m/42944/
搜索引擎背后的原理和日志檢索
當(dāng)我們?cè)谒阉饕嫠阉饕粋€(gè)詞的時(shí)候,背后是上千臺(tái)機(jī)器在為我們工作。那么搜索引擎是如何從數(shù)萬億的網(wǎng)頁中瞬間查找到我們想要的詞的呢?這里要介紹一個(gè)概念叫倒排索引。
倒排索引
倒排索引指的是,把文檔拆分成一個(gè)個(gè)單詞,每個(gè)單詞指向包含該單詞的文檔ID。在查詢時(shí),根據(jù)關(guān)鍵字,找到包含該關(guān)鍵字的文檔ID列表。再根據(jù)ID讀取具體的數(shù)據(jù)。
以英文為例,下面是要被索引的文本:
T0 = "it is what it is"T1 = "what is it"T2 = "it is a banana"我們就能得到下面的反向文件索引:
"a": {2}"banana": {2}"is": {0, 1, 2}"it": {0, 1, 2}"what": {0, 1}查詢what這個(gè)詞時(shí),我們找到了0,1這兩個(gè)ID,然后知道了T0和T1這兩個(gè)文檔包含what這個(gè)詞。
由上文的介紹可知,創(chuàng)建倒排索引的關(guān)鍵在于分詞。對(duì)于英文和中文,分詞方式又有區(qū)別。
英文分詞
英文語句,每個(gè)單詞之間有標(biāo)點(diǎn)符號(hào)分割,因此我們把標(biāo)點(diǎn)符號(hào)設(shè)置為分詞字符,標(biāo)點(diǎn)符號(hào)之間的字符串即為一個(gè)單詞。
例如語句
it is what it is.what is it?it is a banana!
如果分詞字符是空格和. ? ! 那么能夠得到的單詞依次是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!這樣一個(gè)特殊的詞,在查詢時(shí)如果查詢banana是無結(jié)果的,比如查詢banana!才行
配置分詞字符,請(qǐng)?jiān)诓樵兎治鰧傩灾信渲?#xff1a;
中文分詞
中文分詞的困難
中文語句不同于英文語句,英文的每個(gè)單詞之間有標(biāo)點(diǎn)符號(hào)分割,中文的單詞和單詞之間是連接在一起的。中文單個(gè)字沒有意義,只有和相鄰的字組成詞匯時(shí),才有意義。例如語句:
中國(guó)是一個(gè)偉大的國(guó)家,中國(guó)共產(chǎn)黨是一個(gè)偉大的政黨每個(gè)字表達(dá)的含義沒有意義,只有組合成詞匯,才能理解其中的含義。中文博大精深,不同的字有不同的組合方式,在不同的語境下,詞的長(zhǎng)度也不一樣。人類能夠快速的分析出這句話所包含的詞:
中國(guó) 是 一個(gè) 偉大 的 國(guó)家 中國(guó)共產(chǎn)黨 是 一個(gè) 偉大 的 政黨兩句話中的中國(guó),在前一句中是單獨(dú)一個(gè)詞,在后一句中要和之后的共產(chǎn)黨組成一個(gè)詞。
中英文混合日志
針對(duì)包含中文的日志,例如debug message:登錄成功號(hào)是中文冒號(hào),配置的分詞字符是空格。如果只采用分詞字符的方式分詞,那么得到的詞有:
debug message:登錄成功無法單獨(dú)搜索登錄或成功,只有完整輸入message:登錄成功才能搜索到日志。
智能化中文分詞
為了解決中文的分詞問題,我們引入了智能化的分詞算法。
如果日志中包含中文,那么需要打開開關(guān),引入智能化分詞,才能夠搜索中文單詞。
打開后中文開關(guān)后,我們分別可以查詢debug,message,登錄,成功。
中文搜索效果:
總結(jié)
以上是生活随笔為你收集整理的搜索引擎背后的原理和中文日志检索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MSSQL · 最佳实践 · 利用文件组
- 下一篇: 2018亚太CDN峰会开幕,阿里云王海华