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中 與...