lucene 高階搜尋篇

2022-08-27 08:48:11 字數 1814 閱讀 2997

一,概念

1、 lucene相關排序流程

2、 lucene相關類

① query類:乙個抽象類, lucene檢索結果最終評分的總控制中心。其它評分有關的類和物件都是由 query類來管理和生產。

② weight類介面:定義 query權重計算的乙個實現介面,可以被重用。 weight類可以用來生成 scorer類,也可以解析評分的詳細資訊,另外還定義了獲取 query權值的方法。

③ scorer類: lucene評分機制的核心類。類的定義是抽象類,提供的一些抽象基本的計分功能方法提供所有的評分類實現,同時還定義了評分的詳細解析方法, scorer類內部有乙個 similarity物件,用來指明計算公式。

④ scorer類: lucene相似度計算的核心抽象類。 similarity類主要處理評分計算,系統預設使用類 defaultsimilarity類物件

3、 排序控制

使用 sort物件定製排序,通過改變文件 boost值來改變排序結果以及使用自定義的 similarity方法更改排序

4、 文件 boost加權排序

① boost是指索引建立過程中,給整篇文件或者文件的某一特定域設定的權值因子,在檢索時,優先返回分數高的。

document和 field兩重 boosting引數。通過 document物件的 setboost()方法和 field物件的 setboost()方法。不同在於前者對文件中每乙個域都修改了引數,而後者只針對指定域進行修改。

文件加權 =document-boosting*field-boosting,預設情況下為 1,一般不做修改。

② sort物件檢索排序

sort使用時通過例項化物件作為引數,通過 searcher類的 search介面來實現。 sort支援的排序功能以文件當中的域為單位,通過這種方法,可以實現乙個或者多個不同域的多形式的值排序。

實際使用排序物件 sort進行排序。主要有兩種模式,一種是以字串表示文件域的名稱作為引數指定域排序,一種是直接以排序域的包裝域的包裝類作為引數進行排序。

sort物件使用比較簡單,只需要在對文件索引進行檢索時,在檢索器的 search方法中帶 sort物件作為引數即可。

1) sort物件相關性排序

按照相關性排序時最基本的結果排序方法,使用 sort物件無引數建構函式完成的排序效果相當於 lucene預設的按相關性降序排序。

2) sort物件文件編號排序

某些應用場合需要對所有符合匹配度的結果,按照文件內部編號排序輸出。使用 sort物件的靜態例項 sort.indexorder來實現

3) sort物件獨立域排序

指定的排序域並沒有進行特別限制,可以是檢索詞的關聯域,也可以是文件中的任意其它域。

4) sort物件聯合域排序

多個文件域聯合排序時,需要注意文件域的新增次序。排序的結果先按照第乙個域排序,然後第二個域作為次要關鍵字排序。開發時,需要根據自己的需要選擇合適的次序。

5) sort物件逆向排序

sort(field,true)或者 sort(field,false)實現公升降序排序。

二,例子

在**中

//scoredoc hits = searcher.search(q, null, 1000, sort.relevance).scoredocs;

//scoredoc hits = searcher.search(q, null, 1000, sort.indexorder).scoredocs;

scoredoc hits = searcher.search(q, null, 1000).scoredocs;

根據不同的sort 屬性就會得到不同的結果。自己嘗試一下吧

Lucene實現多種高階搜尋形式

布林操作符 大多數的搜尋引擎都會提供布林操作符讓使用者可以組合查詢,典型的布林操作符有 and,or,not。lucene 支援 5種布林操作符,分別是 and,or,not,加 減 接下來我會講述每個操作符的用法。or 如果你要搜尋含有字元 a 或者 b 的文件,那麼就需要使用 or操作符。需要記...

Lucene搜尋優化技巧 索引篇

索引 1 t.termtext 替換為new string t.termbuffer 0,t.termlength 2 stringreader 和tokenstream物件都需要close 3 索引時document只用乙個 field只用幾個 乙個document物件對應多個field例項 fi...

LUCENE搜尋 雞蛋

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