Lucene基礎入門講解

在這裏插入圖片描述

  • 創建索引

    • 環境:

      • 需要下載Lucene
      • http://lucene.apache.org/
      • 最低要求jdk1.8
    • 工程搭建:

      • 創建一個java工程
      • 添加jar:
        • lucene- analyzers- common-7.4.0. jar
        • lucene-core-7.4.0.jar
        • commons-io. jar
    • 步驟:

      1. 創建- -個Director對象,指定索引庫保存的位置。
      2. 基於Directory對象創建一 個IndexWriter對象
      3. 讀取磁盤上的文件,對應每個文件創建一個文檔對象。
      4. 向文檔對象中添加域
      5. 把文檔對象寫入索引庫
      6. 關閉indexwriter對象
      7. 取文檔列表
      8. 打印文檔中的內容
      9. 關閉IndexReader對象
  • 使用luke查看索引庫中的內容

  • 查詢索引庫
    步驟:

    1. 創建一個Director對象,指定索引庫的位置
    2. 創建一個IndexReader對 象
    3. 創建一-個IndetSearcher對象,構造方法中的參數indexReader對象。
    4. 創建一個Query對象,TermQuery
    5. 執行查詢,得到一個TopDocs對象
    6. 取查詢結果的總記錄數

創建索引參考最後代碼的第一個方法。

  • luke可以自行下載,如果之前下載的Lucene版本是及比較新的,裏面應該會含有luke。
    在這裏插入圖片描述
    在這裏插入圖片描述
    雙擊luke.bat即可運行,(注意前提條件是,電腦已經安裝了jdk)
package cn.neu.lucene;

import org.apache.commons.io.FileUtils;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.*;
import org.apache.lucene.search.*;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;

import java.io.File;

/**
 * @Author WCJ
 * @Description
 **/
public class LuceneFirst {
    @Test
    public void createIndex() throws Exception{
        Directory directory = FSDirectory.open(new File("D:\\1_download_install\\my\\lucene\\indexDemo1").toPath());
        IndexWriter indexWriter = new IndexWriter(directory,new IndexWriterConfig());
        File dir = new File("D:\\1_download_install\\my\\lucene\\test");
        File[] files = dir.listFiles();
        for (File f : files) {
            String name = f.getName();
            String path = f.getPath();
            String content = FileUtils.readFileToString(f,"utf-8");
            long size = FileUtils.sizeOf(f);

            Field fieldName = new TextField("name",name, Field.Store.YES);
            Field fieldPath = new TextField("path",path, Field.Store.YES);
            Field fieldContent = new TextField("content",content, Field.Store.YES);
            Field fieldSize = new TextField("size",size+"", Field.Store.YES);

            Document document = new Document();
            document.add(fieldName);
            document.add(fieldPath);
            document.add(fieldContent);
            document.add(fieldSize);

            indexWriter.addDocument(document);
        }
        indexWriter.close();
    }

    @Test
    public void searchIndex()throws Exception{
        Directory directory = FSDirectory.open(new File("D:\\1_download_install\\my\\lucene\\indexDemo1").toPath());
        IndexReader indexReader = DirectoryReader.open(directory);
        IndexSearcher indexSearcher = new IndexSearcher(indexReader);
        Query query = new TermQuery(new Term("content","java"));
        TopDocs topDocs = indexSearcher.search(query,10);//n:最大返回記錄數
        System.out.println("查詢總記錄數:"+topDocs.totalHits);
        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
        for (ScoreDoc sd : scoreDocs) {
            int id = sd.doc;
            Document d = indexSearcher.doc(id);
            System.out.println(d.get("name"));
            System.out.println(d.get("size"));
            System.out.println(d.get("path"));
            System.out.println(d.get("content"));
            System.out.println("--------------寂寞的分割線-------------");
        }
        indexReader.close();

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章