基於Lucene創建索引庫


使用indexwriter對象創建索引

1.1. 實現步驟

整體思想 :1.采集文件系統中的文檔數據,放入Lucene的Document中
2.寫入索引庫()對文檔(Document)進行分詞創建索引(利用IndexWriter對象 )

  第一步:創建一個java工程,並導入jar包。

  第二步:創建一個indexwriter對象。

    1)指定索引庫的存放位置Directory對象

    2)指定一個分析器,對文檔內容進行分析。

  第二步:創建document對象。

  第三步:創建field對象,將field添加到document對象中。

  第四步:使用indexwriter對象將document對象寫入索引庫,此過程進行索引創建。並將索引和document對象寫入索引庫。

  第五步:關閉IndexWriter對象。

1.2. Field域的屬性

  是否分詞:

           分詞的作用是為了索引

           需要分詞: 文件名稱, 文件內容

           不需要分詞: 不需要索引的域不需要分詞,還有就是分詞后無意義的域不需要分詞

                         比如: id, 身份證號

   是否索引:

           索引的的目的是為了搜索.

           需要搜索的域就一定要創建索引,只有創建了索引才能被搜索出來

           不需要搜索的域可以不創建索引

           需要索引: 文件名稱, 文件內容, id, 身份證號等

           不需要索引: 比如圖片地址不需要創建索引, e:\\xxx.jpg

                      因為根據圖片地址搜索無意義

   是否存儲:

           存儲的目的是為了顯示.

    是否存儲看個人需要,存儲就是將內容放入Document文檔對象中保存出來,會額外占用磁盤空間, 如果搜索的時候需要馬上顯示出來可以放入document中也就是要存儲,這樣查詢顯示速度快, 如果不是馬上立刻需要顯示出來,則不需要存儲。       

1.3. 代碼實現

 

//創建索引

  

@Test
    public void testIndexCreate() throws Exception{
        //***整體思想 :1.采集文件系統中的文檔數據,放入Lucene的Document中
        //             2.寫入索引庫()對文檔(Document)進行分詞創建索引(利用IndexWriter對象 )

        //創建文檔列表,保存多個document
        List <Document> docList=new ArrayList<Document>();
        //指定文件所在目錄
        File dir=new File("E:\\ideaworkpase\\demotest\\searchsource");
        //循環取出文件
        for(File file:dir.listFiles()){
            // 文件名稱
            String fileName=file.getName();
            //文件內容
            String fileContext= FileUtils.readFileToString(file);
            //文件大小
            Long fileSize=FileUtils.sizeOf(file);

            //文檔對象,文件系統中的一個文件就是一個document對象
            Document doc=new Document();
            //第一個參數:域名
            //第二個參數:域值
            //第三個參數:是否存儲
            TextField nameField=new TextField("fileName",fileName, Field.Store.YES);
            TextField contextField=new TextField("fileContext",fileContext, Field.Store.YES);
            TextField sizeField=new TextField("fileSize",fileSize.toString(), Field.Store.YES);

            //將所有的域存入文檔中
            doc.add(nameField);
            doc.add(contextField);
            doc.add(sizeField);
            //將文檔存入文檔集合中
            docList.add(doc);
        }

        //創建分詞器,StandarAnalyzer標准分詞器,對英文分詞效果很好,對中文單字分詞
        Analyzer analyzer=new StandardAnalyzer();

        //指定索引和文檔存儲的路徑
        Directory directory= FSDirectory.open(new File("E:\\ideaworkpase\\demotest\\luceneindex"));
        //創建寫對象的初始化對象
        IndexWriterConfig config=new IndexWriterConfig(Version.LUCENE_4_10_3,analyzer);
        //創建索引和文檔寫對象
        IndexWriter indexWriter=new IndexWriter(directory,config);

        //將文檔加入索引和文檔的寫對象中
        for(Document doc:docList){
            indexWriter.addDocument(doc);
        }
        //提交
        indexWriter.close();
        //關閉流
        indexWriter.close();
    }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM