Lucene排序

在本章中,我们将研究的排序顺序默认情况下,在给出的Lucene搜索结果或可根据需要进行操作。

按相关性排序

这是使用Lucene的默认排序方式。 Lucene通过在顶部的最相关的命中提供的结果。

private void sortUsingRelevance(String searchQuery)
   throws IOException, ParseException{
   searcher = new Searcher(indexDir);
   long startTime = System.currentTimeMillis();
   //create a term to search file name
   Term term = new Term(LuceneConstants.FILE_NAME, searchQuery);
   //create the term query object
   Query query = new FuzzyQuery(term);
   searcher.setDefaultFieldSortScoring(true, false);
   //do the search
   TopDocs hits = searcher.search(query,Sort.RELEVANCE);
   long endTime = System.currentTimeMillis();

   System.out.println(hits.totalHits +
      " documents found. Time :" + (endTime - startTime) + "ms");
   for(ScoreDoc scoreDoc : hits.scoreDocs) {
      Document doc = searcher.getDocument(scoreDoc);
      System.out.print("Score: "+ scoreDoc.score + " ");
      System.out.println("File: "+ doc.get(LuceneConstants.FILE_PATH));
   }
   searcher.close();
}

选择IndexOrder排序方式

这被分拣使用lucene模式,其中索引第一文档示出第一搜索结果中。

private void sortUsingIndex(String searchQuery)
   throws IOException, ParseException{
   searcher = new Searcher(indexDir);
   long startTime = System.currentTimeMillis();
   //create a term to search file name
   Term term = new Term(LuceneConstants.FILE_NAME, searchQuery);
   //create the term query object
   Query query = new FuzzyQuery(term);
   searcher.setDefaultFieldSortScoring(true, false);
   //do the search
   TopDocs hits = searcher.search(query,Sort.INDEXORDER);
   long endTime = System.currentTimeMillis();

   System.out.println(hits.totalHits +
      " documents found. Time :" + (endTime - startTime) + "ms");
   for(ScoreDoc scoreDoc : hits.scoreDocs) {
      Document doc = searcher.getDocument(scoreDoc);
      System.out.print("Score: "+ scoreDoc.score + " ");
      System.out.println("File: "+ doc.get(LuceneConstants.FILE_PATH));
   }
   searcher.close();
}

应用程序示例...

让我们创建一个测试Lucene的应用程序来测试分选过程。


步骤 描述
1 创建下名称为LuceneFirstApplication的一个项目作为解释Lucene的应用在包packagecom.xxkt.lucene下,在第一个应用程序的篇章。也可以使用Lucene创建的项目理解搜索过程。
2 创建LuceneConstants.java和Searcher.java作为Lucene的解释- 第一应用程序一章。保持其它文件不变。
3 创建LuceneTester.java如下所述。
4 清理和构建应用程序,以确保业务逻辑按要求工作。


LuceneConstants.java

这个类是用来提供可应用于示例应用程序中使用的各种常量。

package com.xxkt.lucene;

public class LuceneConstants {
   public static final String CONTENTS="contents";
   public static final String FILE_NAME="filename";
   public static final String FILE_PATH="filepath";
   public static final int MAX_SEARCH = 10;
}

Searcher.java

这个类用来读取就使用Lucene库的原始数据,并搜索数据的索引。