Lucene3 5 的索引的建立,刪除,更新,加權

2021-06-18 08:03:42 字數 3318 閱讀 8436

==注意:在涉及到刪除,更改之類的改變索引的操作時,要先重新建立一遍索引,然後再執行相關方法才可以看到效果,否則索引仍然是之前的

1. 索引的建立

(1). 第一步先建立模擬的內容,用於建立索引

private string ids = ;

private string names = ;

private string contents = ;

private string emails = ;

(2). 第二步建立索引要存放的目錄物件例項

private directory directory = null;

public indexutil() catch (exception e)

}

(3). 建立索引

@test

public void createindex()

} catch (corruptindexexception e) catch (lockobtainfailedexception e) catch (ioexception e) finally

} catch (corruptindexexception e) catch (ioexception e)

} }

(4). 選中該createindex方法,執行該單元測試,可以在該專案下面的【

luceneindex/1

】下面看到出現了許多檔案

至此,索引建立成功

2. 索引的查詢

@test

public void searcher()

searcher.close();

reader.close();

} catch (corruptindexexception e) catch (ioexception e)

}

為了後面刪除文件後檢視方便,這裡在新增乙個查詢文件的方法,主要是顯示出已建立的文件數目以及已刪除的文件數目

@test

public void query() catch (corruptindexexception e) catch (ioexception e)

}

3. 索引的刪除

/**

* 刪除索引,刪除之後是放到類似**站之類的裡面去

* 可以撤銷刪除操作

*/@test

public void delete() catch (corruptindexexception e) catch (lockobtainfailedexception e) catch (ioexception e) finally

} catch (corruptindexexception e) catch (ioexception e)

} }

4. 刪除的索引的恢復(類似我們從windows的**站中還原專案一樣)

/**

* 撤銷刪除索引操作,類似從**站還原已刪除的索引

*/@test

public void undo() catch (corruptindexexception e) catch (ioexception e)

}

5. 清空已刪除的索引(類似清空**站)

/**

* 清空已刪除的索引,即類似清空**站

*/@test

public void forcedelete() catch (corruptindexexception e) catch (lockobtainfailedexception e) catch (ioexception e) finally

} catch (corruptindexexception e) catch (ioexception e)

} }

6. 索引的更新

索引的更新:先根據條件刪除該索引,然後再依據你定義的條件重新建立乙個索引,所以更新後的索引可以不和你更新之前的那個條件相同

換句話來講:如果我們要更新資料庫中的某個id的資料的話,肯定要根據這個id來先查找到該條資料,然後執行更新操作,更新之後的id與更新之前的相同,

但是索引的更新和資料庫的更新不同,為先刪除後建立,所以更新後的和更新前的內容(id,content之類的)可以不同

/**

* 更新索引

* 更改文件,其實就是先刪除,然後再重新建立乙個索引

*/@test

public void update() catch (corruptindexexception e) catch (lockobtainfailedexception e) catch (ioexception e) finally

} catch (corruptindexexception e) catch (ioexception e)

} }

7. 索引加權後排序

在沒有設定權值之間,我看了一下是根據你所搜尋的關鍵字的出現次數來排序的,所以在新增權值後會先根據權值來排序,權值越大,越排在前面。權值預設為1.0f

(1)現在中的(1)的後面新增如下**

private mapscores = new hashmap();
(2)現在中的(2)中新增如下**,可以放在directory的前面

scores.put("qq.com", 2.5f);

scores.put("gmail.com", 1.5f);

scores.put("126.com", 2.0f);

(3). 現在中的(2)中新增如下**,可以放在doc.add...的後面,indexwriter的前面

// 設定加權,值越高,權越大,排序越排在前面

// 1. 先按權值排序,權值越大,越排在前面,

// 2. 然後根據查詢的關鍵字來進行排序,關鍵字出現字數越多,越排在前面

string et = emails[i].substring(emails[i].lastindexof("@")+1);

if(scores.containskey(et)) else

至此加權操作完成,之後先重新建立一次索引,然後執行searcher操作,觀察一下排序情況是否和加權之前不同

Lucene3 5 實現建立索引和搜尋例項

1.資料庫作為資料來源,建立索引 建立索引 public void createindex openmode openmode,listlist catch exception e listlist new persistencefacade query from authors where id ...

3 學習Lucene3 5之索引建立 域選項

field string name,string value,field.store store,field.index index 方法解析 引數一 key 引數二 value 引數三 是否儲存到硬碟 儲存域選項 1.field.store.yes 表示把這個域中的內容完全儲存到檔案中,方便進行文...

4 學習Lucene3 5之索引刪除 更新

1 刪除索引 刪除索引 public void deleteindex catch ioexception e finally 2 恢復刪除索引 恢復刪除的索引 從 站 中恢復 public void restoreindex catch ioexception e finally catch io...