鍍金池/ 教程/ 大數(shù)據(jù)/ Lucene搜索操作
Lucene TermRangeQuery類
Lucene排序
Lucene Query類
Lucene搜索操作
Lucene TokenStream
Lucene IndexWriter類
Lucene Term類
Lucene Token
Lucene索引操作
Lucene Field選項(xiàng)
Lucene BooleanQuery類
Lucene StandardAnalyzer類
Lucene字段
Lucene添加文檔操作
Lucene環(huán)境設(shè)置
Lucene Searching類
Lucene StopAnalyzer類
Lucene第一個(gè)應(yīng)用程序
Lucene MatchAllDocsQuery類
Lucene IndexSearcher類
Lucene索引類
Lucene更新文檔操作
Lucene教程
Lucene PrefixQuery類
Lucene Analyzer類
Lucene TopDocs類
Lucene TermQuery類
Lucene文檔
Lucene查詢編程
Lucene WildcardQuery類
Lucene WhitespaceAnalyzer
Lucene SimpleAnalyzer類
Lucene目錄
Lucene刪除文檔操作
Lucene索引過(guò)程
Lucene FuzzyQuery類
Lucene PhraseQuery類
Lucene分析

Lucene搜索操作

搜索過(guò)程是由Lucene所提供的核心功能之一。下圖說(shuō)明了搜索過(guò)程和使用的類。 IndexSearcher是搜索過(guò)程中最重要的和核心組件。

Searching Process

我們首先創(chuàng)建目錄包含索引,然后將它傳遞給IndexSearcher,它使用IndexReader打開(kāi)目錄。然后,創(chuàng)建一個(gè)期限查詢,使搜索usingIndexSearcher通過(guò)將查詢到的搜索。 IndexSearcher返回TopDocs對(duì)象包含搜索信息連同它是搜索操作的結(jié)果的文檔的文檔ID(多個(gè))。

現(xiàn)在,我們將展示一個(gè)循序漸進(jìn)的過(guò)程,以獲得在索引過(guò)程的理解,使用一個(gè)基本的例子。

創(chuàng)建QueryParser

  • QueryParser類解析用戶輸入,并輸入到 Lucene 理解的格式的查詢。

  • 創(chuàng)建QueryParser的對(duì)象。

  • 初始化一個(gè)在此查詢運(yùn)行有標(biāo)準(zhǔn)的分析版本信息和索引的名字創(chuàng)建QueryParser對(duì)象。

QueryParser queryParser;

public Searcher(String indexDirectoryPath) throws IOException{

   queryParser = new QueryParser(Version.LUCENE_36,
      LuceneConstants.CONTENTS,
         new StandardAnalyzer(Version.LUCENE_36));
}

創(chuàng)建IndexSearcher

  • IndexSearcher類作為它在索引過(guò)程中創(chuàng)建搜索索引的核心組成部分。

  • 創(chuàng)建IndexSearcher對(duì)象。

  • 創(chuàng)建其應(yīng)指向位置,其中索引是存儲(chǔ)一個(gè) lucene 的目錄。

  • 初始化索引目錄中創(chuàng)建 IndexSearcher 的對(duì)象

IndexSearcher indexSearcher;

public Searcher(String indexDirectoryPath) throws IOException{
   Directory indexDirectory = 
      FSDirectory.open(new File(indexDirectoryPath));
   indexSearcher = new IndexSearcher(indexDirectory);
}

搜索

  • 要開(kāi)始搜索,通過(guò) QueryParser 解析搜索表達(dá)式創(chuàng)建一個(gè)查詢對(duì)象。

  • 通過(guò)調(diào)用IndexSearcher.search()方法搜索。

Query query;

public TopDocs search( String searchQuery) throws IOException, ParseException{
   query = queryParser.parse(searchQuery);
   return indexSearcher.search(query, LuceneConstants.MAX_SEARCH);
}

獲取文件

public Document getDocument(ScoreDoc scoreDoc) 
   throws CorruptIndexException, IOException{
   return indexSearcher.doc(scoreDoc.doc);	
}

關(guān)閉IndexSearcher

public void close() throws IOException{
   indexSearcher.close();
}

應(yīng)用程序示例

讓我們創(chuàng)建一個(gè)測(cè)試Lucene的應(yīng)用程序來(lái)測(cè)試搜索過(guò)程。

步驟 描述
1 創(chuàng)建下名稱為L(zhǎng)uceneFirstApplication的一個(gè)項(xiàng)目作為解釋Lucene的應(yīng)用在包packagecom.yiibai.lucene下,在第一個(gè)應(yīng)用程序的篇章。也可以使用Lucene創(chuàng)建的項(xiàng)目理解搜索過(guò)程。
2 創(chuàng)建LuceneConstants.java,TextFileFilter.java和Searcher.java 用于 Lucene解釋- 在第一應(yīng)用章節(jié)。其它文件保持不變。
3 創(chuàng)建LuceneTester.java如下所述。
4 清理和構(gòu)建應(yīng)用程序,以確保業(yè)務(wù)邏輯按要求工作。

LuceneConstants.java

這個(gè)類是用來(lái)提供可應(yīng)用于示例應(yīng)用程序中使用的各種常量。

package com.yiibai.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;
}

TextFileFilter.java

此類用于 .txt文件過(guò)濾器。

package com.yiibai.lucene;

import java.io.File;
import java.io.FileFilter;

public class TextFileFilter implements FileFilter {

   @Override
   public boolean accept(File pathname) {
      return pathname.getName().toLowerCase().endsWith(".txt");
   }
}

Searcher.java

這個(gè)類用來(lái)讀取就使用Lucene庫(kù)的原始數(shù)據(jù),并搜索數(shù)據(jù)的索引。

package com.yiibai.lucene;

import java.io.File;
import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;