国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Lucene的多種排序方式的實現(xiàn)

2015-09-11 12:04胡海斌
電腦知識與技術(shù) 2015年17期
關(guān)鍵詞:全文檢索排序

胡海斌

摘要:Lucene是由Apache軟件基金會支持與提供,它源代碼開放并可免費使用,支持純Java開發(fā)的一個全文搜索引擎開發(fā)工具包,它提供了強大的查詢引擎、索引引擎、文本分析引擎等應用程序接口,該文實現(xiàn)了其在全文檢索中多種方式的排序應用,并在項目開發(fā)中得到了較好的呈現(xiàn)。

關(guān)鍵詞:Lucene;Java;全文檢索;排序

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2015)17-0054-02

The Implementation of a Variety of Sorting Methods Based on Lucene

HU Hai-bin

(Experiment Center, China West Normal University, Nanchong 637002, China)

Abstract: Lucene which is open source and free is supported and provided by the Apache Software Foundation. It supports full-text search engine of pure Java development kit, which provides a powerful query engine, indexing engine, text analysis engine and other applications Interface. the paper achieved a variety of sorting methods in the full-text search, and get a better showing in project development.

Key words: Lucene; Java; full-text retrieval; sor

Lucene是由Apache軟件基金會支持與提供,最新版本為5.2.1,它源代碼開放并可免費使用,支持純Java開發(fā)的一個全文搜索引擎開發(fā)工具包,它提供了強大的查詢引擎、索引引擎、文本分析引擎等應用程序接口[1]。Lucene憑借良好的性能、優(yōu)異的索引結(jié)構(gòu)和易于擴展的特性的在實際的項目開發(fā)中得到越來越多的應用[2]。

對檢索結(jié)果排序是搜索引擎中必不可少的功能,也直接影響用戶的體驗度,在Lucene中默認是按評分及相關(guān)度進行排序,然而,在全文檢索的項目開發(fā)中,有時也需要按照如:文件名、文件類型、文件創(chuàng)建日期、文件大小等其它方式排序。本文在研究分析Lucene排序功能基礎(chǔ)之上,以磁盤上的文件檢索為例,設(shè)計并實現(xiàn)了基于Lucene的多種排序方式的應用。

1 Lucene中的排序功能

Lucene系統(tǒng)結(jié)構(gòu)與源碼組織結(jié)構(gòu)如圖1所示,與查詢有關(guān)的源碼主要集中在org.apache.lucene.search包中,在該包中的IndexSearcher類提供了search(Query query, int n, Sort sort)、search(Query query, Filter filter, int n, Sort sort)等方法[3],這些方法通過給定不同的Sort類型實例(對象)以滿足不同的排序需求。Sort類型實例由Sort類和SortField類共同完成,兩者的類圖如圖2所示。在Sort類中可以通過構(gòu)造函數(shù)或setSort函數(shù)設(shè)定排序字段和排序方式(升序或降序)。排序字段和方式可以直接由SortField構(gòu)造函數(shù)來完成,本文調(diào)用的是SortField(field : String, type : int, reverse : boolean)構(gòu)造函數(shù),該構(gòu)造函數(shù)中field為字符串型,表示排序字段名;type是整型,表示排序字段的類型(如:INT為4,表示int型,F(xiàn)LOAT為5,表示float型等等);reverse是布爾型,表示排序為升序或降序。

2 功能設(shè)計

以檢索磁盤上的文件為例,假定已為其建立了全文索引,在索引中存儲的有文件的標題、類型、創(chuàng)建日期、大小、頁數(shù)、存放路徑等信息,要求能檢索其相關(guān)信息,檢索結(jié)果并能按指定的段升序或降序排列。為此,設(shè)計用于保存或獲取文件信息的FileInfo類,其類圖描述如圖3所示:

設(shè)計CustomSort類,其類圖如圖4所示,在類中用getProperty方法實現(xiàn)對給定類的屬性名及類型的遍歷,其結(jié)果以HashMap類型方式保存,用getSort方法實現(xiàn)對給定字段和排序方式的Sort對象的返回,后續(xù)開發(fā)中可以調(diào)用search(Query query, int n, Sort sort)方法以實現(xiàn)多種方式的自定義排序。

3 具體實現(xiàn)

3.1 關(guān)鍵代碼

本文略去Lucene所需開發(fā)環(huán)境的部署說明和編程環(huán)境的配置,其實現(xiàn)多種方式自定義排序的關(guān)鍵代碼如下:

package cn.cwnu.sort;

import java.lang.reflect.Field;

import java.util.HashMap;

import org.apache.lucene.search.Sort;

import org.apache.lucene.search.SortField;

public class CustomSort {

private HashMap getProperty(String classPath) throws Exception {

HashMap fieldHashMap = new HashMap();

// 把要使用的類加載到內(nèi)存中,并且把有關(guān)這個類的所有信息都存放到對象c中

Class<?> c = Class.forName(classPath);

// 把屬性的信息提取出來,并且存放到field類的對象中,因為每個field的對象只能存放一個屬性的信息所以要用數(shù)組去接收

Field f[] = c.getDeclaredFields();

for (int i = 0; i < f.length; i++) {

//屬性的名字,屬性的類型

fieldHashMap.put(f[i].getName(), f[i].getType());

}

return fieldHashMap;

}

private Sort getSort(String sortFieldName, boolean sortMethod) throws Exception {

HashMap fieldHashMap = new HashMap();

fieldHashMap = getProperty("cn.cwnu.lucene.file.bo.FileInfo");

String fieldType = fieldHashMap.get(sortFieldName).toString();

if (fieldType == null) {

System.out.println("指定的排序字段不存在");

return null;

}

int sortType = 0;

if (fieldType.endsWith("int"))

sortType = SortField.INT;

if (fieldType.endsWith("String"))

sortType = SortField.STRING;

if (fieldType.endsWith("float"))

sortType = SortField.FLOAT;

if (fieldType.endsWith("double"))

sortType = SortField.DOUBLE;

Sort sort = new Sort();

SortField sortField = new SortField(sortFieldName, sortType, sortMethod);

sort.setSort(sortField);

return sort;

}

}

3.2 效果展示

相關(guān)代碼在具體項目中應用結(jié)果如圖5所示,既能實現(xiàn)按

照默認的相關(guān)度排序,也能根據(jù)需要選擇按照文件大小、創(chuàng)建日期、文件類型、文件名稱等多種方式排序,圖5展示了對全文檢索結(jié)果按文件大小采用排列的效果。

4 結(jié)論

本文針對全文檢索中多種排序方式的應用需求,展示了其關(guān)鍵代碼和項目中實現(xiàn)的效果,為程序開發(fā)人員提供一定的參考。

參考文獻:

[1] 管建和,甘劍峰.基于Lucene全文檢索引擎的應用研究與實現(xiàn)[J].計算機工程與設(shè)計,2007(2):489-491.

[2] 周登朋,謝康林.Lucene搜索引擎[J].計算機工程,2007(18):95-96+118.

[3] Apache.Lucene 5.2.1 core API[EB/OL].[2015-07-16].http://lucene.apache.org/.

猜你喜歡
全文檢索排序
排序不等式
恐怖排序
Oracle數(shù)據(jù)庫全文檢索性能研究
基于KySou的全文檢索系統(tǒng)的分析與優(yōu)化
用JSP調(diào)用Lucene包來實現(xiàn)全文檢索
昌宁县| 澳门| 筠连县| 屯留县| 高台县| 大英县| 布尔津县| 吴川市| 县级市| 绥中县| 溆浦县| 成武县| 宝山区| 淮北市| 福州市| 伊金霍洛旗| 资兴市| 驻马店市| 调兵山市| 东丽区| 甘泉县| 儋州市| 寿光市| 连江县| 祁门县| 丹巴县| 永济市| 鹿邑县| 尉犁县| 那坡县| 海兴县| 长葛市| 临夏市| 浑源县| 武夷山市| 洛川县| 攀枝花市| 武穴市| 阜新市| 绥芬河市| 兴海县|