- 自己動手寫分布式搜索引擎
- 羅剛
- 647字
- 2020-11-28 15:52:45
3.2.2 創建索引庫
索引一般存放在硬盤中的一個路徑中。例如,在路徑d:/lucene/index下創建索引。
//索引建立在硬盤上 Directory directory = FSDirectory.open(new File("d:/lucene/index"));
可以用Lucene提供的API創建和更新索引。在生成索引的過程中涉及幾個類,它們之間的關系如圖3-4所示。

圖3-4 創建索引過程中用到的類
可以通過IndexWriter在指定的索引路徑下創建一個新的索引庫,IndexWriter位于索引管理包org.apache.lucene.index中。雖然可以這樣寫:
org.apache.lucene.index.IndexWriter iw = new org.apache.lucene.index.IndexWriter(dir, iwc);
但是為了簡化寫法,往往使用import關鍵字導入這個類:
import org.apache.lucene.index.IndexWriter;
用類似的寫法導入其他的類。
不同版本的索引格式不一樣。可以按指定的版本號寫入索引,例如,如果在項目中導入lucene-core-6.3.0.jar這個jar包,就指定版本號是LUCENE_43:
static Version matchVersion=Version.LUCENE_43;
寫入按詞組織的索引時,要指定用哪個類把文檔切分成詞,Analyzer類實現分詞功能。各種文本分析器都是Analyzer的子類。例如,使用標準分析器:
Analyzer analyzer=new StandardAnalyzer();
有個專門配置IndexWriter參數的類IndexWriterConfig。
Analyzer analyzer=new StandardAnalyzer(); IndexWriterConfig iwc=new IndexWriterConfig(analyzer); iwc.setOpenMode(OpenMode.CREATE); //總是新建索引
也可以根據指定的目錄下是否已經有索引存在,決定是向已有的索引追加文檔,還是重新建立索引。根據該文件夾下是否存在索引文件來決定是否追加索引的判斷如下:
boolean createIndex = false; String indexDir = "d:/index"; Directory indexDirectory = FSDirectory.open(new File(indexDir)); // 該文件夾下是否存在索引文件 if (! IndexReader.indexExists(indexDirectory)) { createIndex = true; } // 根據createIndex的值來決定是否追加索引
這些只需要一行IndexWriterConfig配置代碼:
iwc.setOpenMode(OpenMode.CREATE_OR_APPEND); //保存已有的索引中的數據
根據索引路徑和配置信息創建一個IndexWriter,代碼如下:
//默認create_or_append iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE); //總是重新創建索引 Directory dir =FSDirectory.open(new File(indexPath)); IndexWriter iw=new IndexWriter(dir, iwc); //指定索引路徑和配置信息 iw.addDocument(doc); iw.close();
如果有多個索引,一般不會放在同一個路徑下。除了在可以長期保存的物理路徑中,索引庫還可以僅在內存中,也就是創建一個位于RAMDirectory的索引。
Directory dir = new RAMDirectory(); //內存路徑 ndexWriter iw=new IndexWriter(dir, iwc);
在測試分詞或索引的時候,可能會用到內存索引。
推薦閱讀
- ModelSim電子系統分析及仿真(第3版)
- Microsoft Forefront UAG 2010 Administrator's Handbook
- 對比Excel,輕松學習SQL數據分析
- 中文版SolidWorks 2015技術大全
- 3ds max & VRay產品造型設計經典
- 3ds Max & Unreal Engine 4:VR三維建模技術實例教程(附VR模型)
- ImageMagick Tricks
- 音樂日記:Logic Pro X場景x風格編曲實用教程
- 新媒體美工一冊通(全彩)
- AI繪畫實戰:Midjourney從新手到高手
- Django 1.0 Template Development
- UG NX 12.0完全自學寶典
- Choosing an Open Source CMS: Beginner's Guide
- Illustrator CC 2018 基礎與實戰教程(全彩版)
- OpenGL 4.0 Shading Language Cookbook