前言
1:爲什麼要講fst和skiplist
檢索的倒排結構通常包含兩種結構,一個是詞典(一般要加載到內存),一個是倒排表。如下圖
一次查詢需要經歷兩個階段,找到詞典的位置(或者叫判斷這個詞存不存在),比如輸入Lucene,先要找到這個詞存在的位置。詞典的存儲結構就有兩種實現方式,fst或跳錶。Lucene3.0之前使用的是跳躍表結構,後換成了FST,但跳躍表在Lucene其他地方還有應用如倒排表合併和文檔號索引。@hxx 跳躍表加速合併,因爲布爾查詢時,and 和or 操作都需要合併倒排表,這時就需要快速定位相同文檔號,所以利用跳躍表來進行相同文檔號查找
2:兩者在Lucene中各佔據什麼位置?關係是怎樣的
都是或者曾經是詞典數據結果的實現方式,現在各自在Lucene中佔據一席之地。沒有啥關係,看優缺點吧!
skiplist優點:結構簡單、跳躍間隔、級數可控,Lucene3.0之前使用的也是跳躍表結構,後換成了FST,但跳躍表在Lucene其他地方還有應用如倒排表合併和文檔號索引。 skiplist 缺點:模糊查詢支持不好
skiplist優點:內存佔用率低,壓縮率一般在3倍~20倍之間、模糊查詢支持好、查詢快 skiplist缺點:結構複雜、輸入要求有序、更新不易
3:一個合格的詞典結構要求有:
1. 查詢速度。
2. 內存佔用。
3. 內存+磁盤結合。
4:漢字怎麼前綴
使用的是Unicode編碼,如下