Solr__luence(二)检索索引,分页搜索
2017-08-17 18:45
302 查看
创建索引后如何查询?应该从什么方面下手?去获取我们想要的数据通过索引
检索索引思路
用户通过搜索界面——>创建查询——>执行搜索,搜索器从索引库中搜索——>渲染搜索结果
3、 调用indexSearcher.search("检索条件",
-- topDocs.totalHits 命中的总记录数
-- SocreDoc[] scoreDocs = topDocs.scoreDocs
分数文档数组
-- scoreDoc.score 分数
-- document.get("字段名");获取字段值
分页搜索
这里是延迟加载的,用到才会去加载数组内的内容,并不是一次性加载全部文档,需要用到才回去搜索加载
用户通过搜索界面——>创建查询——>执行搜索,搜索器从索引库中搜索——>渲染搜索结果
具体实现步骤:
1、 配置依赖jar包(lucene-core-4.10.3.jar、lucene-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(); }
这里是延迟加载的,用到才会去加载数组内的内容,并不是一次性加载全部文档,需要用到才回去搜索加载
相关文章推荐
- Solr__luence(三)检索与创建索引的API及名词解析
- Solr笔记四之Solrj创建索引和搜索的一般步骤
- jplogicv1.0开发开发案例之知识库文档信息索引检索(类仿百度搜索、类google搜索)
- 黑马程序员_学习日记49_618数据库开发及ADO.Net(多条件搜索、case…when…语句、索引Index、子查询、分页、Join语句)
- SolrCloud wiki翻译(6)近实时搜索, 索引复制,灾难恢复
- Solr搜索分页
- [搜索] Solr (三) 全量索引与增量索引
- elasticsearch 5.5.0 java操作(新增索引、分页搜索)
- 搜索系统:全文检索(lucene、排序、多域搜索、高亮、分页、监听器)
- 利用SOLR搭建企业搜索平台之十四(Solr的检索运算符)
- SolrCloud wiki翻译(6)近实时搜索, 索引复制,灾难恢复
- Win7下Solr4.10.1和MySql的整合(索引与搜索)
- 全文检索Lucene入门之创建索引及简单搜索
- Solr Multivalue field的索引和搜索
- solr安装部署、solr测试创建core、用solrj 访问solr(索引和搜索)
- [全文索引]MySQL 全文搜索支持, mysql 5.6.4支持Innodb的全文检索和类memcache的nosql支持。
- solr安装部署、solr测试创建core、用solrj 访问solr(索引和搜索)
- 通过对QParser类的继承 实现SOLR 半匹配检索(模糊搜索/模糊检索) (一)
- 一步一步跟我学习lucene(8)---lucene搜索之索引的查询原理和查询工具类(支持分页)示例
- solr查询索引,各种查询,查询字符串,过滤查询,条件查询,排序查询、分页查询、高亮查询