倒排索引要存哪些信息
??提到倒排索引,第一感覺是詞到文檔列表的映射,實際上,倒排索引需要存儲的信息不止詞和文檔列表。為了使用余弦相似度計算搜索詞和文檔的相似度,需要計算文檔中每個詞的TF-IDF值,這樣就需要記錄詞在每個文檔中出現的頻率以及包含這個詞的文檔數量,前者需要對應每個文檔記錄一個值,后者就是倒排表長度。除此以外,為了能夠高亮搜索結果,需要記錄每個詞在文檔中的偏移信息(起始位置和長度),為了支持短語查詢,需要記錄每個詞的position信息,注意position和offset不是一個概念,position是文檔分詞之后得到的term序列中詞的位置,offset是分詞之前的偏移,如果文檔中一個詞被分成多個Term,那么這些Term將共享同一個position,典型場景是同義詞,這在自然語言處理中很有用。如果用戶希望在Term級別干預查詢打分結果,那么就需要對文檔中的每個詞存儲額外的信息(payload)。
??綜上,倒排索引需要存儲的信息主要有以下幾方面:
詞(Term)
倒排文檔列表(DocIDList)
詞頻(TermFreq)
Position
Offset
Payload
??有幾點需要特別說明,lucene中Term是對每個Field而言的,也就是說在Document不同Field中出現的相同字面的詞也算不同的Term。搞清楚了這一點,就很容易理解TermFreq、Position、Offset、Payload都是在一個Document中Field下的統(tǒng)計量。另外,同一個Term在同一個Document的同一個Field中,Position、Offset、Payload可能會出現多次,次數由TermFreq決定。
lucene中倒排索引的邏輯結構如下:
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數據結構來看看(二) 2017-07-26