Lucene 搜尋功能

2021-08-27 08:40:50 字數 2785 閱讀 9517

lucene的搜尋功能主要包括:

對特定項搜尋、查詢表示式:queryparser、分頁實現、其他查詢方式如下

指定項範圍查詢 termrangequery ;

指定數字範圍查詢 numericrangequery ;

指定字串開頭搜尋 prefixquery ;

組合查詢 booleanquery

中文分詞&高亮顯示:中文分詞 smartcn、檢索結果高亮顯示實現

lucene 的檢索介面主要由queryparser、indexsearcher、hits這3 個類構成,queryparser 是查詢解析器,負責解析使用者提交的查詢關鍵字,在新建乙個解析器時需要指定要解析的域和使用什麼語言分析器,這裡使用的語言分析器必須與索引庫建立時使用的解析器相同,否則查詢結果不正確。indexsearcher是索引搜尋器,在例項化indexsearcher時需要指定索引庫所在的目錄,indexsearcher有乙個search 方法執行索引的檢索,這個方法接受query 作為引數,返回hits,hists 是一系列排好序的查詢結果的集合,集合的元素是document。通過document的get 方法可以得到與這個文件對應檔案的資訊,比如:檔名、檔案路徑、檔案內容等。

如圖查詢主要有兩種方式,但是推薦使用第一種構造queryparser表示式,它可以有靈活的組合方式,包括布林邏輯表達、模糊匹配等,但是第二種term只能針對詞彙查詢。

1.構造queryparser查詢式:

queryparser parser=new queryparser("fullpath", analyzer);

query query=parser.parse(q);

2.對特定項的查詢:

term t = new term("filename", q);

query query = new termquery(t);

查詢結果如圖5-1所示:以查詢檔案名filename包含「大」為例。

圖5-1:「大」查詢結果

在構造queryparser時,通過對詞項q的修改可以實現精確匹配和模糊匹配。模糊匹配通過在「q」之後加「~」進行修改。如圖5-2所示:

圖5-2:模糊匹配

布林邏輯查詢和模糊查詢只需要對查詢詞q進行更改,而限定條件查詢需要對query表示式進行設定,主要分為以下幾類:

分別為指定項範圍搜尋、指定數字範圍、指定字串開頭和多條件查詢,分別列出應用的查詢,true引數指的:是否包含上限和下限在內。

指定項範圍:

termrangequery query=new termrangequery("desc", new bytesref("b".getbytes()), new bytesref("c".getbytes()), true, true);
指定數字範圍:

numericrangequeryquery=numericrangequery.newintrange("id", 1, 2, true, true);
指定字串開頭:

prefixquery query=new prefixquery(new term("city","a"));
多條件查詢:

numericrangequeryquery1=numericrangequery.newintrange("id", 1, 2, true, true);

prefixquery query2=new prefixquery(new term("city","a"));

booleanquery.builder booleanquery=new booleanquery.builder();

booleanquery.add(query1,booleanclause.occur.must);

booleanquery.add(query2,booleanclause.occur.must);

高亮的設定**如圖5-3所示,結果如圖5-4所示,會對南京匹配詞新增和標籤,顯示到網頁上為加粗和變紅。

queryscorer scorer=new queryscorer(query);

fragmenter fragmenter=new ******spanfragmenter(scorer);

******htmlformatter ******htmlformatter=new ******htmlformatter("","");

highlighter highlighter=new highlighter(******htmlformatter, scorer);

highlighter.settextfragmenter(fragmenter);

圖5-3:高亮設定

圖5-4:高亮顯示結果

LUCENE搜尋 雞蛋

query 這是乙個抽象類,他有多個實現,比如 termquery,booleanquery,prefixquery.這個類的目的是把使用者輸入的查詢字串封裝成 lucene 能夠識別的 query。term termquery termquery 是抽象類 query 的乙個子類,它同時也是 lu...

Lucene 搜尋方式

lucene有多種搜尋方式,可以根據需要選擇不同的方式。1 詞條搜尋 單個關鍵字查詢 主要物件是termquery 呼叫方式如下 term term new term 欄位名,搜尋關鍵字 query query new termquery term hits hits searcher.search...

Lucene 搜尋方法(範圍搜尋)

在某些情況下,使用者需要查詢一定範圍內的文件,比如時間,id等。package com.querytype import org.apache.lucene.index.term import org.apache.lucene.search.booleanclause import org.apa...