Solr__luence(二)检索索引,分页搜索

创建索引后如何查询?应该从什么方面下手?去获取我们想要的数据通过索引

检索索引思路


用户通过搜索界面——>创建查询——>执行搜索,搜索器从索引库中搜索——>渲染搜索结果

具体实现步骤:

1、 配置依赖jar(lucene-core-4.10.3.jarlucene-analyzers-common-4.10.3.jar)


2、 创建IndexSearcher对象

/**
 * 从索引库中检索
 * @author LEE.SIU.WAH
 * @email lixiaohua7@163.com
 * @version 1.0
 */
public class IndexSearcherTest {
	/** 检索数据 */
	@Test
	public void test() throws Exception{
	/** 创建读索引库对象 */
	IndexReader indexReader = DirectoryReader.open(FSDirectory.open(new File("D:\\传智播客\\Lucene4\\lucene_index")));
	/** 创建IndexSearcher对象 */
	IndexSearcher indexSearcher = new IndexSearcher(indexReader);


3、 调用indexSearcher.search("检索条件", "检索的记录数")进行检索

				/** 创建查询对象(检索条件) */
				Query query = new TermQuery(new Term("content", "我"));
		
				/** 进行检索,返回最前面的5条记录 */
				TopDocs topDocs = indexSearcher.search(query, 5);


4、 TopDocs最前面的文档对象

-- topDocs.getMaxScore() 最好分数
-- topDocs.totalHits 命中的总记录数
-- SocreDoc[] scoreDocs = topDocs.scoreDocs 分数文档数组
System.out.println("最大分数:" + topDocs.getMaxScore());
System.out.println("总命中数:" + topDocs.totalHits);


5、 迭代分数文档数组

-- scoreDoc.doc 文档在索引库的id
-- scoreDoc.score 分数

6、 根据分数文档id获取索引库中的文档

    -- Document document = indexSearcher.doc(docId);
    -- document.get(" 字段名"); 获取字段值
// 获取分数文档数组
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
for (ScoreDoc scoreDoc : scoreDocs){
		System.out.println("分数:" + scoreDoc.score);
		System.out.println("文档ID:" + scoreDoc.doc);
		// 通过文档id获取文档
		Document d = indexSearcher.doc(scoreDoc.doc);
		System.out.println(d.get("id") + "\t" + d.get("fileName") + "\t" + d.get("filePath")+ "\t" + d.get("fileContent"));
}
indexReader.close();


分页搜索


/** 分页检索数据 */
@Test
public void test() throws Exception{
/** 创建读索引库对象 */
IndexReader indexReader = DirectoryReader
.open(FSDirectory.open(
new File("D:\\Lucene4\\lucene_index")));
/** 创建IndexSearcher对象 */
IndexSearcher indexSearcher = new IndexSearcher(indexReader);
/** 创建查询对象(检索条件) */
Query query = new TermQuery(new Term("content", "爱"));
/** 当前页码 */
int pageIndex = 1;
/** 每页显示的数量 */
int pageSize = 2;
/** 进行检索,返回最前面的5条记录 */
TopDocs topDocs = indexSearcher.search(query, pageIndex * pageSize);
System.out.println("命中的总记录数:" + topDocs.totalHits);
System.out.println("最大的分数:" + topDocs.getMaxScore());
/** 获取分数文档数组 */
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
/** 迭代检索到得分数文档数组 */
for (int i = (pageIndex - 1) * pageSize; i < scoreDocs.length; i++){
ScoreDoc scoreDoc = scoreDocs[i];
System.out.println("文档分数:" + scoreDoc.score);
System.out.println("文档索引号:" + scoreDoc.doc);
/** 根据索引号docId,获取文档 */
Document doc = indexSearcher.doc(scoreDoc.doc);
System.out.println(doc.get("id") + "\t" + doc.get("name") 
+ "\t" + doc.get("filePath") 
+ "\t" + doc.get("content"));
}
indexReader.close();
}

这里是延迟加载的,用到才会去加载数组内的内容,并不是一次性加载全部文档,需要用到才回去搜索加载

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值