lucene四種索引方式詳解

2021-08-30 05:29:25 字數 3478 閱讀 7040

1。今天研究了一下lucene,對於初學者來說,有乙個地方以前還沒怎麼弄懂,可能不是很用心吧。今天又寫點小的作業,用lucene來實現,對於以前遇到的這點問題進行了總結。

lucene提供四個不同的字段型別,你可以從中做出選擇:

n keyword—不被分析,但是被索引並逐字儲存到索引中。這個型別適合於原始值需要保持原樣的字段,如url、檔案系統路徑、日期、個人名稱、社會安全號碼、**號碼等等。例如,我們在indexer(列表1.1)中把檔案系統路徑作為keyword欄位。

n unindexed—不被分析也不被索引,但是它的值儲存到索引中。這個型別適合於你需要和搜尋結果一起顯示的字段(如url或資料庫主鍵),但是你從不直接搜尋它的值。因為這種型別欄位的原始值儲存在索引中,這種型別不適合於存放比較巨大的值,如果索引大小是個問題的話。

n unstored—和unindexed相反。這個字段型別被分析並索引但是不儲存在索引中。它適合於索引大量的文字而不需要以原始形式重新獲得它。例如網頁的主體或任休其它型別的文字文件。

n text—被分析並索引。這就意味著這種型別的字段可以被搜尋,但是要小心字段大小。如果要索引的資料是乙個string,它也被儲存;但如果資料(如我們的indexer例子)是來自乙個reader,它就不會被儲存。這通常是混亂的**,所以在使用field.text時要注意這個區別。

上面是lucene in action中寫道的,但是以前不是理解的很到位,今天弄明白了些。

1。對於keyword--我們在程式當中可以通過keyword進行查詢,並可以通過get(「keyword」)來獲取keyword的值

舉例:如

indexwriter writer = new indexwriter(dir, getanalyzer(), false);

string keyword="1234567".

document doc= new document();

doc.add(field.keyword("telephone","1234567"))

doc.close();

writer.adddocument(doc);

query query = queryparser.parse(str, "telephone", new standardanalyzer());

hits hits = is.search(query);

for (int i = 0; i < hits.length(); i++)

列印的結果為:1234567

就是2。對於unindexed,我們不能通過這個欄位來索引,如果你這樣做,那麼肯定差不到任何值,但是通過其它的如keyword索引後,如unindexed的字段設為city。你通過keyword查詢後,可以通過呼叫get("city")的值來獲取unindexed的值。

indexwriter writer = new indexwriter(dir, getanalyzer(), false);

string keyword="1234567".

document doc= new document();

doc.add(field.unndexed("telephone","1234567"))

doc.close();

writer.adddocument(doc);

query query = queryparser.parse(str, "telephone", new standardanalyzer());

hits hits = is.search(query);

for (int i = 0; i < hits.length(); i++)

列印的結果為:null

3. unstore 這個字段支援索引,但是不儲存原始的資訊。通過呼叫get方法獲得不了這個欄位的值。

indexwriter writer = new indexwriter(dir, getanalyzer(), false);

string keyword="1234567".

document doc= new document();

doc.add(field.keyword("telephone","1234567"))

doc.close();

writer.adddocument(doc);

query query = queryparser.parse(str, "telephone", new standardanalyzer());

hits hits = is.search(query);

for (int i = 0; i < hits.length(); i++)

列印的結果為:null

這個字段支援索引,我們可以通過這個字段進行索引,然後呼叫其他欄位的值,但是不能通過其他字段索引呼叫這個欄位的 get方法,那麼還是不能夠得到所塑要的值。

4. text

分兩種情況

第一,以string為引數:

indexwriter writer = new indexwriter(dir, getanalyzer(), false);

string keyword="1234567".

document doc= new document();

doc.add(field.text("telephone","1234567"))

doc.close();

writer.adddocument(doc);

query query = queryparser.parse(str, "telephone", new standardanalyzer());

hits hits = is.search(query);

for (int i = 0; i < hits.length(); i++)

輸出結果為1234567

這是以字串衛引數,那麼既可以支援索引又可以呼叫這個字段儲存的原始資訊。

第二種情況

以檔案流為引數

indexwriter writer = new indexwriter(dir, getanalyzer(), false);

string keyword="1234567".

document doc= new document();

doc.add(field.text("telephone",new filereader("hello.txt")))

doc.close();

writer.adddocument(doc);

query query = queryparser.parse(str, "telephone", new standardanalyzer());

hits hits = is.search(query);

for (int i = 0; i < hits.length(); i++)

假設未見hello.txt中存在1234567這個字串。

輸出結果為null

這個是以檔案流為引數,他不儲存原始的檔案資訊,但是支援索引。所以這個方法和unstore用起來是一樣的。

USB 四種傳輸方式詳解

usb,有四種的傳輸方式,控制 control 同步 isochronous 中斷 interrupt 大量 bulk 如果你是從硬體開始來設計整個的系統,你還要正確選擇傳輸的方式,而作為乙個驅動程式的書寫者,就只需要弄清楚他是採用的什麼工作方式就行了,通常所有的傳輸方式下的主動權都在pc邊,也就是...

thinkphp四種url訪問方式詳解

為了配合所使用的url模式,我們需要能夠動態的根據當前的url設定生成對應的url位址,為此,thinkphp內建提供了u方法,用於url的動態生成,可以確保專案在移植過程中不受環境的影響。u方法的定義規則如下 方括號內引數根據實際應用決定 u 位址表示式 引數 偽靜態字尾 顯示網域名稱 位址表示式...

spring bean 的四種注入方式詳解

只要了解spring xml 配置檔案中的 標籤內容與bean 的屬性對應關係就明白了 和set注入方式差不多,主要是 xml 標籤 標籤與bean 構造方法的對應關係 通過配置 的 class 和factory method 來指定乙個靜態工廠類的靜態方法建立bean 並且注入到spring中 與...