首先,我們應該有乙個概念,在lucene的內建排序方法中,公升降序規則預設都是natural ording,即在sorting by relevance中預設desc,在其他排序中則是asc。
1.sorting by relevance,中文可以叫"適當的排序"?好象有點彆扭,呵呵.這也是lucene的預設排序,即按評分結果倒序排列.
以下幾種search方法都是實現的同樣的效果:
search(query query,null),search(query query,sort.relevance),search(query query,new sort())
結果首先按照評分結果desc排序,如果評分相同,則按照document id asc排序,其中,document id是document在索引時的先後順序。
2.sorting by index order,按照索引的先後順序asc排列。
3.sorting by a field,按field排序。field是在索引時建立的單元。這裡需要注意的一點是,如果想按照field來排序,需要幾個規則:首先,這個 field必須是indexed and not tokenized,就是需要索引,但是不能分詞,例如field.keyword()方法;這個field必須可以轉換成 integers,floats,strings,可以在用field生成sort物件的時候指定field的型別。
正像前邊提到的,在lucene中的預設結果公升降序規則是natural ording,當然我們也可以自己指定排序的公升降序規則。
首先,我們指定結果按照某乙個field來desc排序(如果不指定,field是按照asc排序)。例 如,indexsearcher.search(query query,new sort("date",true)),這裡引數true的作用既是使得結果按照date field按照降序排列,這樣我們就可以將日期最近的結果排列到最前面。
通常,排序規則不會這麼簡單。例如,在某乙個圖書查詢系統中,我們需要的排序規則是,首先按照圖書的目錄排序,然後同一目錄的圖書按照評分結果排序,評分結果相同並且目錄相同的圖書按照出版日期降序排列,**片段如下:
indexsearcher.search(query query,new sort(
new sortfield
)這裡,我們指定了乙個sortfield的陣列,圖書目錄按照字典公升序排列,然後目錄相同的按照評分結果降序排列,最後按照出版日期降序排列。
其實,在lucene內部自動維護了乙個排序的陣列,只是在這個例子中,我們顯示的指定了排序的規則而已。
排序對查詢效能的影響。排序需要額外的資源消耗,更多的記憶體消耗。lucene只是快取實際需要排序的field。即使如此,如果需要自定義排序,仍然需要仔細的規劃,記住,按照乙個string來排序將花費最大的資源。
sort自定義排序
1.sort介紹 用於c 中,對給定區間所有元素進行排序。使用的排序方法類似於快排的方法,時間複雜度為n log2 n 執行效率較高 標頭檔案 include algorithm 2.sort使用方法 sort函式有3個引數,sort first,last,cmp 其中,first是元素的起始位址,...
sort自定義排序
參考 例 大整數排序。對n個長度最長可達到1000的數進行排序。輸入第一行為乙個整數n,1 n 100 接下來的n行每行有乙個數,數的長度範圍為1 len 1000。每個數都是乙個正數,並且保證不包含字首零。include include include include using namespac...
sort自定義型別排序
乙個很簡單的問題,不過也磨了我好一會,在些總結記錄。1.對於不用寫自定義資料結構的情況 static int cmp const pair x,const pair y if x.second y.second return x.second y.second else return x.first...