正向索引和倒排索引
-
什么是正向索引?
傳統的數據庫采用正向索引,如MySQL將表中的id創建索引,正向索引在進行不是id為索引進行搜索的時候,會逐條進行查詢,比方說
倒排索引上圖的表格,數據庫進行逐條查詢,當掃描到搜索字的時候會將該行存入結果集當中,如果沒有就會進行丟棄。
-
elasticsearch采用的就是倒排索引它將要搜索的數據進行劃分:
-
文檔(document):每條數據就是一個文檔
-
詞條(term):文檔按照語義分成的詞語
-
-
如上表,當用戶用倒排索引進行搜索的時候,會劃分一個新的索引表,將原來的數據當中的東西,通過關鍵字進行劃分,當有相同的時候會在文檔的后面增加上索引,當有新的時候會創建出來一行新的數據,依此類推。
-
當用戶搜索的時候,如上圖比方說小米和手機,會先將搜索詞進行語義的劃分,然后在詞條列表當中進行查詢,將包含這兩個詞條的文檔id都進行列舉,再根據文檔id進行查詢,最后根據匹配度對其進行排序,存到結果集當中。
-
總結:
什么是正向索引?
-
基于文檔id創建索引。查詢詞條時必須先找到文檔,而后判斷是否包 含詞條
什么是倒排索引?
-
對文檔內容分詞,對詞條創建索引,并記錄詞條所在文檔的信息。查詢時先根據詞條查詢到文檔id,而后獲取到文檔
-