- 自己動手寫分布式搜索引擎
- 羅剛
- 520字
- 2020-11-28 15:52:42
2.1 構 建 索 引
為了按詞建立索引,需要對文檔分詞。把這個分詞類叫作Analyzer。文檔內容作為輸入流Reader的實例傳入。
public class Analyzer { String[] split(Reader reader) { //對文檔內容分詞,并返回分詞后的詞數組 } }
首先建立文檔索引,也就是正排索引,然后建立倒排索引。
正排索引用到的DocConsumer類如下。
public class DocConsumer { public int docid; //文檔編號 //詞到頻率的映射,頻率存在長度是1的整數數組中 HashMap<String, int[]> frequencyList; int words; //文檔長度,也就是這個文檔包含多少個詞 }
然后建立倒排索引。倒排索引用到的Posting類如下。
public class Posting implements Serializable { public int docid; //文檔編號 public int freq; //這個詞在文檔中出現了多少次 Posting(int doc, int freq) { this.docid = doc; this.freq = freq; } }
這里把文檔作為一個字符串,如果有多列,可以把文檔作為一個自定義的對象。
public class Document { public String title; //標題列 public String content; //內容列 }
為了更靈活地定義文檔的結構,可以專門定義一個Field類。
public class Field { /** 列名 */ public final String name; /** 列值 */ public String fieldsData; }
一個Document類的實例中可以包含多個Field類的實例。
在真正的信息檢索中,都是有多個列的,而且很多列有同等重要的地位。對于多個列的檢索,簡單的方法是:給每個倒排列附加一個bit-map,假設有N列,則Bitmap長度是N。例如,title出現,則第1位為1, content沒出現,則第2位為0。實際的做法是:把一個列中所有的詞連續存放到一起,一個專門的列定義文件中包括某個列中這些詞信息的開始位置,如圖2-2所示。

圖2-2 多列索引
推薦閱讀
- Premiere Pro 2022短視頻剪輯、調色與特效制作實戰(全彩微課版)
- Adobe創意大學Illustrator產品專家認證標準教材(CS6修訂版)
- Flash CC動畫制作案例教程
- 中文版Maya 2022完全自學教程
- COSPLAY的后期藝術:Lightroom+Photoshop修圖技法攻略
- Blender 2.5 Materials and Textures Cookbook
- AutoCAD 2022中文版建筑設計從入門到精通
- CAXA電子圖板2016基礎與實例教程
- JBoss Tools 3 Developers Guide
- Photoshop手繪從新手到高手
- 詳解AutoCAD 2022室內設計(第6版)
- Photoshop+CorelDRAW平面設計案例實戰:從入門到精通(視頻自學全彩版)
- Web Host Manager Administration Guide
- Creo 5.0從入門到精通(第2版)
- Photoshop CC 平面設計