官术网_书友最值得收藏!

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);

在測試分詞或索引的時候,可能會用到內存索引。

主站蜘蛛池模板: 金坛市| 元朗区| 高尔夫| 玉环县| 响水县| 深水埗区| 随州市| 临汾市| 琼海市| 巴彦县| 乡城县| 阿巴嘎旗| 贡嘎县| 余江县| 福贡县| 成武县| 察雅县| 武乡县| 澄城县| 自贡市| 蓝山县| 六盘水市| 榆社县| 休宁县| 晋宁县| 宁国市| 垦利县| 乐山市| 洛隆县| 巧家县| 睢宁县| 三门峡市| 乐安县| 苏州市| 湖北省| 石台县| 漳浦县| 红安县| 绥阳县| 山丹县| 来安县|