• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

      胡海斌

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

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

      中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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軟件基金會(huì)支持與提供,最新版本為5.2.1,它源代碼開(kāi)放并可免費(fèi)使用,支持純Java開(kāi)發(fā)的一個(gè)全文搜索引擎開(kāi)發(fā)工具包,它提供了強(qiáng)大的查詢引擎、索引引擎、文本分析引擎等應(yīng)用程序接口[1]。Lucene憑借良好的性能、優(yōu)異的索引結(jié)構(gòu)和易于擴(kuò)展的特性的在實(shí)際的項(xiàng)目開(kāi)發(fā)中得到越來(lái)越多的應(yīng)用[2]。

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

      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],這些方法通過(guò)給定不同的Sort類型實(shí)例(對(duì)象)以滿足不同的排序需求。Sort類型實(shí)例由Sort類和SortField類共同完成,兩者的類圖如圖2所示。在Sort類中可以通過(guò)構(gòu)造函數(shù)或setSort函數(shù)設(shè)定排序字段和排序方式(升序或降序)。排序字段和方式可以直接由SortField構(gòu)造函數(shù)來(lái)完成,本文調(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是布爾型,表示排序?yàn)樯蚧蚪敌颉?/p>

      2 功能設(shè)計(jì)

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

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

      3 具體實(shí)現(xiàn)

      3.1 關(guān)鍵代碼

      本文略去Lucene所需開(kāi)發(fā)環(huán)境的部署說(shuō)明和編程環(huán)境的配置,其實(shí)現(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)這個(gè)類的所有信息都存放到對(duì)象c中

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

      // 把屬性的信息提取出來(lái),并且存放到field類的對(duì)象中,因?yàn)槊總€(gè)field的對(duì)象只能存放一個(gè)屬性的信息所以要用數(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)代碼在具體項(xiàng)目中應(yīng)用結(jié)果如圖5所示,既能實(shí)現(xiàn)按

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

      4 結(jié)論

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

      參考文獻(xiàn):

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

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

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

      猜你喜歡
      全文檢索排序
      排序不等式
      恐怖排序
      節(jié)日排序
      刻舟求劍
      兒童繪本(2018年5期)2018-04-12 16:45:32
      Oracle數(shù)據(jù)庫(kù)全文檢索性能研究
      基于KySou的全文檢索系統(tǒng)的分析與優(yōu)化
      特色數(shù)據(jù)庫(kù)全文檢索系統(tǒng)的設(shè)計(jì)
      用JSP調(diào)用Lucene包來(lái)實(shí)現(xiàn)全文檢索
      大方县| 根河市| 铜鼓县| 广河县| 永登县| 玉屏| 铜鼓县| 石首市| 滁州市| 榆林市| 临安市| 晋中市| 舒城县| 遵义市| 汽车| 明水县| 耒阳市| 白玉县| 五台县| 贵溪市| 甘洛县| 麻栗坡县| 灵寿县| 和龙市| 海南省| 瓮安县| 施甸县| 黄陵县| 工布江达县| 井陉县| 哈巴河县| 温泉县| 万山特区| 敖汉旗| 鸡泽县| 环江| 英吉沙县| 腾冲县| 西乡县| 板桥市| 铜梁县|