三、lucene入門例項:搜尋索引
搜尋索引作為lucene兩大基本操作之一,涉及到很多具體的搜尋設定,這裡先用乙個簡單的搜尋例項來展示lucene的搜尋功能,**如下:
public void query() throws parseexception, corruptindexexception, ioexception ;
queryparser queryparser = new multifieldqueryparser(version.lucene_30, fields, analyzer);
query query = queryparser.parse(querystr);
system.out.println("query物件格式:" + query);
// 2.開始查詢
long start = system.currenttimemillis();
indexsearcher searcher = new indexsearcher(fsdirectory.open(new file(indexdir)));
topdocs topdocs = searcher.search(query, 10000);
system.out.println("共計查詢到:" + topdocs.totalhits + " 條結果,用時" + (system.currenttimemillis() - start)+ "毫秒");
for (scoredoc scoredoc : topdocs.scoredocs)
}
簡析:indexsearcher作用就是完成對索引的搜尋,但是搜尋前必須傳遞乙個query物件。為什麼要傳遞query物件而不是傳遞乙個字串直接進行搜尋,首先要明確lucene建立索引中用到了字段域,其次要明確乙份文件可能有很多字段域組成,搜尋時不可能對每個字段域都進行搜尋,最後要明確query物件實質就是字段域資訊(列印query物件可以看出),即是說把搜尋字串和字段域的名稱相結合構造了字段域。明確了以上三點就不難理解query物件的建立。搜尋結果集topdocs物件,此物件持有兩個重要資訊:一是查詢到的總記錄數,二是查詢到記錄數的集合(document物件的集合),類似於資料庫查詢結果的封裝。需要特別說明的是scoredoc物件並不是乙個真正document物件,它只是記錄了文件物件的編號,要想獲取document物件,還需使用indexsearcher類的doc方法來查出對應的document物件。得到了document物件,就可以獲取字段域及查詢到的資訊。
總結查詢三個關鍵物件:query物件、indexwriter物件、topdocs物件
四、分詞器
1.詞的定義
詞是經過分詞器處理後的字串,更具體地說詞是經過分詞器以下四大操作而形成的字串:
(2)去除停用詞:停用詞是指一些出現頻率較高,但是沒有實際意義的詞,比如英文中的「a an the」等,中文中的「的了著」等。
(3)詞形還原:主要是指把英文中的單詞進行去尾操作,如現在分詞、過去分詞還原成詞根形式,複數單詞轉為單數形式。
(4)轉為小寫:把所有英文本母全部轉成小寫字母。
經過以上4步操作後得到的結果稱為詞元(token),這些詞元共同構成了詞。
2.分詞結果
為了能看清分詞器分詞後的效果,我們可以使用如下**來測試。
public class analyzertest
public void printanalyzerresult(analyzer analyzer, string text) throws ioexception
}}
簡析:tokenstream是詞元的集合(a
tokenstream
enumerates the sequence of tokens
),即是說它包含分詞後的所有結果詞元。我們也可根據tokenstream來構建乙個字段域field物件,如:
field field =newfield(
"result"
,ts);
從分詞結果中列印的詞元資訊我們可以驗證「分詞器對詞進行的四大操作」。
3.由分詞引發的問題
(1)使用相同分詞器:建立索引時使用的分詞器要和搜尋時構建query物件使用分詞器相同。(2)在查詢時英文本母還原為小寫,這一步通常我們不需要關注,因為再把把查詢文字解析成query物件時,分詞器會幫我們完成。(3)分詞器的選擇應以業務而定,也可以根據業務來實現特定的分詞器。
二 快速入門
一 springboot預設埠號為8080 在沒有主啟動類的情況下 package com.dudu.service import org.springframework.boot.autoconfigure.enableautoconfiguration import org.springfram...
Flask入門二 快速入門
from flask import flask 路由裝飾器 defhello world 檢視函式 return hello world 返回乙個字串 if name main 把程式儲存為hello.py 用python直譯器執行 python hello.py running on訪問 會看見 ...
lucene入門學習
我們生活中的資料總體分為兩種 結構化資料和非結構化資料 全文檢索 將非結構化資料中的一部分資訊提取出來,重新組織,使其變得有一定結構,然後對此有一定結構的資料進行搜尋,從而達到搜尋相對較快的目的。這部分從非結構化資料中提出的然後重新組織的資訊,我們稱之為索引。這種先建立索引,再對索引進行搜尋的過程就...