lucene学习笔记(3)---使用lucene实现索引库的读取

一、实现步骤:

第一步:创建一个Directory对象,也就是索引库存放的位置。

第二步:创建一个indexReader对象,需要指定Directory对象。

第三步:创建一个indexsearcher对象,需要指定IndexReader对象

第四步:创建一个TermQuery对象,指定查询的域和查询的关键词。

第五步:执行查询。

第六步:返回查询结果。遍历查询结果并输出。

第七步:关闭IndexReader对象

    1. IndexSearcher搜索方法

 

方法

说明

indexSearcher.search(query, n)

根据Query搜索,返回评分最高的n条记录

indexSearcher.search(query, filter, n)

根据Query搜索,添加过滤策略,返回评分最高的n条记录

indexSearcher.search(query, n, sort)

根据Query搜索,添加排序策略,返回评分最高的n条记录

indexSearcher.search(booleanQuery, filter, n, sort)

根据Query搜索,添加过滤策略,添加排序策略,返回评分最高的n条记录

2、具体代码实现

@Test
	public void testReadIndex() throws Exception {
		//指定索引库存放的路径
				//D:\temp\0108\index
				Directory directory = FSDirectory.open(new File("D:\\lucene\\index"));
				//创建indexReader对象
				IndexReader indexReader = DirectoryReader.open(directory);
				//创建indexsearcher对象
				IndexSearcher indexSearcher = new IndexSearcher(indexReader);
				//创建查询
				TermQuery query = new TermQuery(new Term("filename", "apache"));
				//执行查询
				//第一个参数是查询对象,第二个参数是查询结果返回的最大值
				TopDocs topDocs = indexSearcher.search(query, 10);
				//查询结果的总条数
				System.out.println("查询结果的总条数:"+ topDocs.totalHits);
				//遍历查询结果
				//topDocs.scoreDocs存储了document对象的id
				for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
					//scoreDoc.doc属性就是document对象的id
					//根据document的id找到document对象
					Document document = indexSearcher.doc(scoreDoc.doc);
					System.out.println(document.get("filename"));
					//System.out.println(document.get("content"));
					System.out.println(document.get("path"));
					System.out.println(document.get("size"));
				}
				//关闭indexreader对象
				indexReader.close();
			}
	}

三、使用代码测试分词器的效果

@Test
	public void testAnalazer() throws Exception {
		//测试分词器
		//创建一个标准分析器对象
				Analyzer analyzer = new StandardAnalyzer();
				//获得tokenStream对象
				//第一个参数:域名,可以随便给一个
				//第二个参数:要分析的文本内容
				TokenStream tokenStream = analyzer.tokenStream("test", "The Spring Framework provides a comprehensive programming and configuration model.");
				//添加一个引用,可以获得每个关键词
				CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
				//添加一个偏移量的引用,记录了关键词的开始位置以及结束位置
				OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);
				//将指针调整到列表的头部
				tokenStream.reset();
				//遍历关键词列表,通过incrementToken方法判断列表是否结束
				while(tokenStream.incrementToken()) {
					//关键词的起始位置
					System.out.println("start->" + offsetAttribute.startOffset());
					//取关键词
					System.out.println(charTermAttribute);
					//结束位置
					System.out.println("end->" + offsetAttribute.endOffset());
				}
				tokenStream.close();
	}
	}

 

猜你喜欢

转载自blog.csdn.net/pbrlovejava/article/details/81323278