-
創建索引
-
環境:
- 需要下載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
-
步驟:
- 創建- -個Director對象,指定索引庫保存的位置。
- 基於Directory對象創建一 個IndexWriter對象
- 讀取磁盤上的文件,對應每個文件創建一個文檔對象。
- 向文檔對象中添加域
- 把文檔對象寫入索引庫
- 關閉indexwriter對象
- 取文檔列表
- 打印文檔中的內容
- 關閉IndexReader對象
-
-
使用luke查看索引庫中的內容
-
查詢索引庫
步驟:- 創建一個Director對象,指定索引庫的位置
- 創建一個IndexReader對 象
- 創建一-個IndetSearcher對象,構造方法中的參數indexReader對象。
- 創建一個Query對象,TermQuery
- 執行查詢,得到一個TopDocs對象
- 取查詢結果的總記錄數
創建索引參考最後代碼的第一個方法。
- 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();
}
}