1. 程式人生 > >lucene的開發環境配置,並實現lucene功能一:建立索引;及程式碼示例

lucene的開發環境配置,並實現lucene功能一:建立索引;及程式碼示例

1. 配置開發環境

1.1. Lucene下載

Lucene是開發全文檢索功能的工具包,從官方網站下載Lucene4.10.3,並解壓。

版本:lucene4.10.3

Jdk要求:1.7以上

IDEEclipse

1.2. 使用的jar

Lucene包:

lucene-core-4.10.3.jar

lucene-analyzers-common-4.10.3.jar

lucene-queryparser-4.10.3.jar

其它:

commons-io-2.4.jar

junit-4.9.jar

2. 功能一:建立索引庫

使用indexwriter物件建立索引

2.1. 實現步驟

第一步:建立一個

java工程,並匯入jar包。

第二步:建立一個indexwriter物件。

1)指定索引庫的存放位置Directory物件

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

第二步:建立document物件。

第三步:建立field物件,將field新增到document物件中。

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

第五步:關閉IndexWriter物件。

2.2. Field域的屬性

是否分析:是否對域的內容進行分詞處理。前提是我們要對域的內容進行查詢。

是否索引Field分析後的詞或整個Field

值進行索引,只有索引可搜尋到

比如:商品名稱、商品簡介分析後進行索引,訂單號、身份證號不用分析但也要索引,這些將來都要作為查詢條件。

是否儲存Field值儲存在文件中,儲存在文件中的Field才可以從Document中獲取

比如:商品名稱、訂單號,凡是將來要從Document中獲取的Field都要儲存

是否儲存的標準:是否要將內容展示給使用者

Field

資料型別

Analyzed

是否分析

Indexed

是否索引

Stored

是否儲存

說明

StringField(FieldName, FieldValue,Store.YES))

字串

N

Y

YN

這個Field用來構建一個字串Field,但是不會進行分析,會將整個串儲存在索引中,比如(訂單號,姓名等)

是否儲存在文件中用Store.YESStore.NO決定

LongField(FieldName, FieldValue,Store.YES)

Long

Y

Y

YN

這個Field用來構建一個Long數字型Field,進行分析和索引,比如(價格)

是否儲存在文件中用Store.YESStore.NO決定

StoredField(FieldName, FieldValue)

過載方法,支援多種型別

N

N

Y

這個Field用來構建不同型別Field

不分析,不索引,但要Field儲存在文件中

TextField(FieldName, FieldValue, Store.NO)

TextField(FieldName, reader)

字串

Y

Y

YN

如果是一個Reader, lucene猜測內容比較多,會採用Unstored的策略.

2.3. 程式碼實現

//建立索引

@Test

publicvoid createIndex()throws Exception {

//指定索引庫存放的路徑

//D:\temp\0108\index

Directory directory = FSDirectory.open(new File("D:\\temp\\0108\\index"));

//索引庫還可以存放到記憶體中

//Directory directory = new RAMDirectory();

//建立一個標準分析器

Analyzer analyzer = new StandardAnalyzer();

//建立indexwriterCofig物件

//第一個引數: Lucene的版本資訊,可以選擇對應的lucene版本也可以使用LATEST

//第二根引數:分析器物件

IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer);

//建立indexwriter物件

IndexWriter indexWriter =new IndexWriter(directory, config);

//原始文件的路徑D:\java\01.課程\04.lucene\01.參考資料\searchsource

File dir = new File("D:\\java\\01.課程\\04.lucene\\01.參考資料\\searchsource");

for (File f : dir.listFiles()) {

//檔名

String fileName = f.getName();

//檔案內容

String fileContent = FileUtils.readFileToString(f);

//檔案路徑

String filePath = f.getPath();

//檔案的大小

long fileSize  = FileUtils.sizeOf(f);

//建立檔名域

//第一個引數:域的名稱

//第二個引數:域的內容

//第三個引數:是否儲存

Field fileNameField = new TextField("filename", fileName, Store.YES);

//檔案內容域

Field fileContentField = new TextField("content", fileContent, Store.YES);

//檔案路徑域(不分析、不索引、只儲存)

Field filePathField = new StoredField("path", filePath);

//檔案大小域

Field fileSizeField = new LongField("size", fileSize, Store.YES);

//建立document物件

Document document = new Document();

document.add(fileNameField);

document.add(fileContentField);

document.add(filePathField);

document.add(fileSizeField);

//建立索引,並寫入索引庫

indexWriter.addDocument(document);

}

//關閉indexwriter

indexWriter.close();

}