6、学习lucene之搜索索引

        在第一篇里,我写了根据文件建立索引的方法,在此我就再写下搜索的方法。我们都知道,lucene的简单原理就是对现有的资源先建立所以,然后再去搜索索引,而不是直接去搜索资源,这样用索引的方式来搜资源速度相当快,就像我们查字典时不是直接去查某个字,而是根据前面的目录来查。了解了这个搜索索引的方法后,就可以写一个简单的建索引和搜索引的实现了。

        我把这个过程细分成了9个步骤,为了看明白,分的细了些。

        1、创建Directory,索引的存放位置

        2、创建IndexReader

        3、根据IndexReader创建IndexSearcher

        4、创建搜索的Query

              4.1、创建QueryParser对象

              4.2、通过QueryParser获取Query对象

        5、根据searcher搜索指定的条数并且返回TopDocs

        6、根据TopDocs获取ScoreDoc数组

        7、根据IndexSearcher和ScoreDoc对象获取具体的Document对象

        8、根据Document获取需要的值

        9、关闭IndexReader


直接上代码:

package com.hlp.lucene.searchIndex;

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

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.queryParser.ParseException;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;
/**
 * 功能:搜索索引
 *
 */
public class SearchIndex1
{
    // 索引的存放位置
    String luceneIndex = "G://lucene//luceneIndex1";
    
    // 分词器
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
    
    public void searchIndex()
    {
	IndexReader indexReader = null;
	try
	{
	    // 1、创建Directory,索引的存放位置
	    Directory directory = FSDirectory.open(new File(luceneIndex));

	    // 2、创建IndexReader
	    indexReader = IndexReader.open(directory);

	    // 3、根据IndexReader创建IndexSearcher
	    IndexSearcher indexSearcher = new IndexSearcher(indexReader);

	    // 4、创建搜索的Query
	    // 4.1、创建QueryParser对象
	    QueryParser qParser = new QueryParser(Version.LUCENE_35, "fileContent", analyzer);
	    // 4.2、通过QueryParser获取Query对象
	    Query query = qParser.parse("java");
	    
	    // 5、根据searcher搜索指定的条数并且返回TopDocs
	    TopDocs topDocs = indexSearcher.search(query, 8);
	    
	    // 6、根据TopDocs获取ScoreDoc数组
	    ScoreDoc[] sDocs = topDocs.scoreDocs;

	    Document document = new Document();
	    for(ScoreDoc sd:sDocs)
	    {
		// 7、根据IndexSearcher和ScoreDoc对象获取具体的Document对象
		document = indexSearcher.doc(sd.doc);
		
		// 8、根据Document获取需要的值
		System.out.println("文件名:" + document.get("fileName"));
		System.out.println("路    径:" + document.get("filePath"));
		System.out.println("===========================================================");
	    }
	}
	catch (CorruptIndexException e)
	{
	    e.printStackTrace();
	}
	catch (IOException e)
	{
	    e.printStackTrace();
	}
	catch (ParseException e)
	{
	    e.printStackTrace();
	}finally
	{
	    // 9、关闭IndexReader
	    try
	    {
		indexReader.close();
	    }
	    catch (IOException e)
	    {
		e.printStackTrace();
	    }
	} // finally
	
    } // end searchIndex
}

在第4步中,搜索的条件Query,还有好多不同的搜索Query,针对不同的条件来搜索,在下一篇中会做说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值