對初步了解es挺好的。
elasticsearch使用一種叫做倒排索引(inverted index)的結構來做快速的全文搜尋。倒排索引由在文件中出現的唯一的單詞列表,以及對於每個單詞在文件中的位置組成。
例如,我們有兩個文件,每個文件content
字段包含:
the quick brown fox jumped over the lazy dog
quick brown foxes leap over lazy dogs in summer
為了建立倒排索引,我們首先切分每個文件的content
欄位為單獨的單詞(我們把它們叫做詞(terms)或者表徵(tokens))(譯者注:關於terms
和tokens
的翻譯比較生硬,只需知道語句分詞後的個體叫做這兩個。),把所有的唯一詞放入列表並排序,結果是這個樣子的:
term
doc_1
doc_2
quick
xthe
xbrownxx
dogx
dogs
xfox
xfoxesxin
xjumped
xlazyxx
leap
xoverxx
quick
xsummer
xthe
x現在,如果我們想搜尋"quick brown"
,我們只需要找到每個詞在哪個文件中出現即可:
term
doc_1
doc_2
brownxx
quick
x-----
-------
-----
total21
兩個文件都匹配,但是第乙個比第二個有更多的匹配項。 如果我們加入簡單的相似度演算法(similarity algorithm),計算匹配單詞的數目,這樣我們就可以說第乙個文件比第二個匹配度更高——對於我們的查詢具有更多相關性。
但是在我們的倒排索引中還有些問題:
"quick"
和"quick"
被認為是不同的單詞,但是使用者可能認為它們是相同的。
"fox"
和"foxes"
很相似,就像"dog"
和"dogs"
——它們都是同根詞。
"jumped"
和"leap"
不是同根詞,但意思相似——它們是同義詞。
上面的索引中,搜尋"+quick +fox"
不會匹配任何文件(記住,字首+
表示單詞必須匹配到)。只有"quick"
和"fox"
都在同一文件中才可以匹配查詢,但是第乙個文件包含"quick fox"
且第二個文件包含"quick foxes"
。(譯者注:這段真囉嗦,說白了就是單複數和同義詞沒法匹配)
使用者可以合理地希望兩個文件都能匹配查詢,我們也可以做得更好。
如果我們將詞為統一為標準格式,這樣就可以找到不是確切匹配查詢,但是足以相似從而可以關聯的文件。例如:
"quick"
可以轉為小寫成為"quick"
。
"foxes"
可以被轉為根形式"fox"
。同理"dogs"
可以被轉為"dog"
。
"jumped"
和"leap"
同義就可以只索引為單個詞"jump"
現在的索引:
term
doc_1
doc_2
brownxx
dogx
xfo***
inxjumpxx
lazyxx
overxx
quickxx
summer
xthexx
但我們還未成功。我們的搜尋"+quick +fox"
依舊失敗,因為"quick"
的確切值已經不在索引裡,不過,如果我們使用相同的標準化規則處理查詢字串的content
字段,查詢將變成"+quick +fox"
,這樣就可以匹配到兩個文件。
MapReduce倒排索引簡單實現
倒排索引 倒排索引是文件檢索系統中最常用的資料結構,被廣泛的應用於全文搜尋引擎。它主要用來儲存某個單詞 或片語 在乙個文件或一組文件中的儲存位置的對映,即提供了一種根據內容來查詢文件的方式,由於不是根據文件來確定文件所包含的內容,而是進行了相反的操作,因而被稱為倒排索引。例如 input 輸入有三個...
正排索引和倒排索引簡單介紹
在搜尋引擎中,資料被爬取後,就會建立index,方便檢索。在工作中經常會聽到有人問,你這個index是正排的還是倒排的?那麼什麼是正排呢?什麼又是倒排呢?下面是一些簡單的介紹。網頁a中的內容片段 tom is a boy.tom is a student too.網頁b中的內容片段 jon work...
正排索引和倒排索引理解詳解
叮嘟!這裡是小啊嗚的學習課程資料整理。好記性不如爛筆頭,今天也是努力進步的一天。一起加油高階吧!文件 單詞1 單詞2 單詞1 出現的次數 單詞出現的位置 單詞2 單詞2出現的位置 正排索引 在搜尋欄輸入id查詞條 已知id 單詞1 文件1 文件2,文件3 單詞2 文件1,文件2 倒排索引 將搜尋框中...