Elasticsearch 6 入門教程之ElasticSearch倒排索引和分詞器

系列文章

倒排索引

Elasticsearch 使用一種稱爲 倒排索引 的結構,它適用於快速的全文搜索。一個倒排索引由文檔中所有不重複詞的列表構成,對於其中每個詞,有一個包含它的文檔列表。

示例:

  • (1):假設文檔集合包含五個文檔,每個文檔內容如圖所示,在圖中最左端一欄是每個文檔對應的文檔編號。我們的任務就是對這個文檔集合建立倒排索引。
  • 2):中文和英文等語言不同,單詞之間沒有明確分隔符號,所以首先要用分詞系統將文檔自動切分成單詞序列。這樣每個文檔就轉換爲由單詞序列構成的數據流,爲了系統後續處理方便,需要對每個不同的單詞賦予唯一的單詞編號,同時記錄下哪些文檔包含這個單詞,在如此處理結束後,我們可以得到最簡單的倒排索引“單詞ID”一欄記錄了每個單詞的單詞編號,第二欄是對應的單詞,第三欄即每個單詞對應的倒排列表
  • (3):索引系統還可以記錄除此之外的更多信息,下圖還記載了單詞頻率信息(TF)即這個單詞在某個文檔中的出現次數,之所以要記錄這個信息,是因爲詞頻信息在搜索結果排序時,計算查詢和文檔相似度是很重要的一個計算因子,所以將其記錄在倒排列表中,以方便後續排序時進行分值計算。
  • (4):倒排列表中還可以記錄單詞在某個文檔出現的位置信息
  • (1,<11>,1),(2,<7>,1),(3,<3,9>,2)

有了這個索引系統,搜索引擎可以很方便地響應用戶的查詢,比如用戶輸入查詢詞“Facebook”,搜索系統查找倒排索引,從中可以讀出包含這個單詞的文檔,這些文檔就是提供給用戶的搜索結果,而利用單詞頻率信息、文檔頻率信息即可以對這些候選搜索結果進行排序,計算文檔和查詢的相似性,按照相似性得分由高到低排序輸出,此即爲搜索系統的部分內部流程。

倒排索引原理

1.The quick brown fox jumped over the lazy dog

2.Quick brown foxes leap over lazy dogs in summer

倒排索引:

Term Doc_1 Doc_2

Quick | | X The | X | brown | X | X dog | X | dogs | | X fox | X | foxes | | X in | | X jumped | X | lazy | X | X leap | | X over | X | X quick | X | summer | | X the | X |

搜索quick brown :

Term Doc_1 Doc_2

brown | X | X quick | X |


Total | 2 | 1

計算相關度分數時,文檔1的匹配度高,分數會比文檔2高

問題:

Quick 和 quick 以獨立的詞條出現,然而用戶可能認爲它們是相同的詞。

fox 和 foxes 非常相似, 就像 dog 和 dogs ;他們有相同的詞根。

jumped 和 leap, 儘管沒有相同的詞根,但他們的意思很相近。他們是同義詞。

搜索含有 Quick fox的文檔是搜索不到的

使用標準化規則(normalization): 建立倒排索引的時候,會對拆分出的各個單詞進行相應的處理,以提升後面搜索的時候能夠搜索到相關聯的文檔的概率

Term Doc_1 Doc_2

brown | X | X dog | X | X fox | X | X in | | X jump | X | X lazy | X | X over | X | X quick | X | X summer | | X the | X | X

分詞器介紹及內置分詞器

分詞器:從一串文本中切分出一個一個的詞條,並對每個詞條進行標準化

包括三部分:

  • character filter:分詞之前的預處理,過濾掉HTML標籤,特殊符號轉換等
  • tokenizer:分詞
  • token filter:標準化

ElasticSearch內置分詞器:

  • standard 分詞器:(默認的)他會將詞彙單元轉換成小寫形式,並去除停用詞和標點符號,支持中文采用的方法爲單字切分
  • simple 分詞器:首先會通過非字母字符來分割文本信息,然後將詞彙單元統一爲小寫形式。該分析器會去掉數字類型的字符。
  • Whitespace 分詞器:僅僅是去除空格,對字符沒有lowcase化,不支持中文; 並且不對生成的詞彙單元進行其他的標準化處理。
  • language 分詞器:特定語言的分詞器,不支持中文

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章