索引學習筆記

2021-07-23 05:44:41 字數 3386 閱讀 7373

一、index屬性介紹

field.store.yes或者no(儲存域選項)

yes:將會儲存域值,原始字串的值會儲存在索引中,以此可以進行相應的恢復操作,對於主鍵,標題可以是這種方式儲存

no:不會儲存域值,通常與index.anaylized合起來使用,索引一些如文章正文等不需要恢復的文件 , 此時內容無法完全還原(doc.get)

field.index(索引選項)

index.analyzed:進行分詞和索引,適用於標題、內容等

index.not_analyzed:進行索引,但是不進行分詞,如果身份證號,姓名,id等,適用於精確搜尋

index.analyzed_not_norms:進行分詞但是不儲存norms資訊,這個norms中包括了建立索引的時間和權值等資訊

index.not_analyzed_not_norms:即不進行分詞也不儲存norms資訊

index.no:不進行索引

使用場景

二、索引檔案的初步認識:

_0.fdt

_0.fdx

---儲存域的值---

_0.fnm

---儲存域的名稱---

_0.frq

---分詞出現的頻率---

_0.nrm

---儲存評分資訊---

_0.prx

---位偏移量---

_0.tii

_0.tis

---索引資訊---

三、索引建立步驟

1、建立directory

directory directory = fsdirectory.open(new file("d:/test/index01"));
2、建立writer

indexwriter writer = new indexwriter(directory, 

new indexwriterconfig(version.lucene_35,new standardanalyzer(version.lucene_35)));

3、建立文件並且新增索引

文件和域的概念很重要

文件相當於表中的每一條記錄,域相當於表中每乙個字段

document document = null;

collectionfiles = fileutils.listfiles(new file("d:/test/lucene"),filefilefilter.file, null);

for (file file : files)

4、查詢索引的基本資訊

indexreader reader = indexreader.open(directory);

//通過reader可以有效的獲取到文件的數量

system.out.println("numdocs:" + reader.numdocs() );//可以使用的文件數量

system.out.println("maxdocs:" + reader.maxdoc() );//所有的文件數量,包括被刪除的文件

system.out.println("deletedocs:" + reader.numdeleteddocs() );//被刪除的文件數量

reader.close();

5、刪除索引

//引數是乙個選項,可以是乙個query,也可以是乙個term,term是乙個精確查詢的值

//此時刪除的文件並不會被完全刪除,而是儲存在乙個**站中的,可以恢復

writer.deletedocuments (new term ("id", "1"));

writer.commit();

6、恢復刪除

try
7、強制刪除,相當於刪除**站裡面的,徹底刪除了

writer = new indexwriter(directory, new indexwriterconfig(version.lucene_35, new standardanalyzer(version.lucene_35)));

writer.forcemergedeletes ();

8、優化和合併索引

writer = new indexwriter(directory, new indexwriterconfig(version.lucene_35, new standardanalyzer(version.lucene_35)));

//會將索引合併為2段,這兩段中的被刪除的資料會被清空

//特別注意:此處lucene在3.5之後不建議使用,因為會消耗大量的開銷,

//lucene會根據情況自動處理的

writer.forcemerge (2);

9、更新索引

writer = new indexwriter(directory, new indexwriterconfig(version.lucene_35,

new standardanalyzer(version.lucene_35)));

/* * lucene並沒有提供更新,這裡的更新操作其實是如下兩個操作的合集

* 先刪除之後再新增

*/ document doc = new document();

doc.add(new field("id", "11", field.store.yes, field.index.not_analyzed_no_norms));

doc.add(new field("email", emails[0], field.store.yes, field.index.not_analyzed));

doc.add(new field("content", contents[0], field.store.no, field.index.analyzed));

doc .add(new field("name", names[0], field.store.yes, field.index.not_analyzed_no_norms));

writer.updatedocument(new term("id", "1"), doc);

//會把原來id=1的那個文件刪掉,新增id=11的那個文件

大小: 33.5 kb

索引 學習筆記

tablespace 表空間可以省略 b樹索引 反向鍵索引 函式索引 位圖索引 刪除索引 b樹索引 示例一 建立一張表並使用pl sql的資料生成器匯入10萬條記錄 建立儲戶表 create table depositor actid integer notnull identify integer...

索引 學習筆記

tablespace 表空間可以省略 b樹索引 反向鍵索引 函式索引 位圖索引 刪除索引 b樹索引 示例一 建立一張表並使用pl sql的資料生成器匯入10萬條記錄 建立儲戶表 create table depositor actid integer notnull identify integer...

Sql server索引學習筆記

索引定義 加速表中資料行的訪問速度,確保唯一性,加速連線等操作而建立的一種分散儲存結構 1.建立索引語法 create unique clustered nonclustered index index name 簇索引行以索引位置存放,按鍵字值排序 on column,column text,nt...