一,概念
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...