ElasticSearch 搜索引擎概念簡介

公號:碼農充電站pro
主頁:https://codeshellme.github.io

1,倒排索引

倒排索引是一種數據結構,經常用在搜索引擎的實現中,用於快速找到某個單詞所在的文檔。

倒排索引會記錄一個單詞詞典(Term Dictionary)和一個倒排列表

  • 單詞詞典:包含了所有文檔包含的所有 Term。
  • 倒排列表:由一系列的倒排索引項組成,每個倒排索引項包含 4 項內容,分別是:
    • 文檔 ID
    • 詞頻 TF:Term 在文檔中出現的次數,用於相關性評分。
    • 位置 Position:Term 在文檔中出現的位置,用於語句搜索。
    • 偏移 Offset:記錄單詞的開始結束位置,用於實現高亮顯示。

假設我們有 3 篇文檔:

文檔 ID 文檔內容
1 hello world
2 hello Java
3 hello elasticsearch

上面表格記錄的是一種正向關係,叫做正排索引

倒排索引記錄的是一種反向關係,如下:

Term 文檔 ID 詞頻 TF Position Offset
hello 1 1 0 <0, 5>
hello 2 1 0 <0, 5>
hello 3 1 0 <0, 5>
world 1 1 1 <6, 5>
Java 2 1 1 <6, 4>
elasticsearch 3 1 1 <6, 19>

ES 默認會對所有文檔的所有字段建立倒排索引;也可以通過設置不對某些字段建立倒排索引,優點是節省空間,缺點是這些字段的內容無法被搜索。

2,搜索相關性

搜索相關性用於描述文檔搜索字符串的匹配程度(ES 會計算出一個評分),目的是爲文檔進行排序,從而將最符合用戶需求的文檔排在前面。

搜索相關性算法有 TF-IDF 算法和 BM25 算法。

文章 《樸素貝葉斯分類-實戰篇》中介紹到了 TF-IDF 算法,可作爲參考。

BM25TF-IDF 的比較:

在這裏插入圖片描述

當 TF 無限增加的時候,BM25 算分會趨向於一個數值,而不是(像 TF-IDF 一樣)無限增長。

ES 5 之前,默認使用的是 TF-IDF 算法;在 ES 5 之後,默認使用的是 BM 25 算法。

3,一個搜索過程

下圖展示了一個搜索過程:

在這裏插入圖片描述

當用戶向搜索引擎發送一個搜索請求的時候,搜索引擎經過了以下步驟:

  1. 分詞器對搜索字符串進行分詞處理。
  2. 在倒排索引表中查到匹配的文檔。
  3. 對每個匹配的文檔進行相關性評分。
  4. 根據相關性評分對文檔進行排序。
  5. 將排好序的文檔返回給用戶。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章