最近项目中碰到问题,发现在调用SolrIndexSearcher的
public TopFieldDocs search(Query query, Filter filter, int n,
Sort sort) throws IOException;
和public DocSet getDocSet(Query query) throws IOException;
效果差别比较大;
查阅了代码发现在SolrIndexSearcher.getDocSet(Query query)中第一次搜索query时,内部实现是调用 getDocSetNC(Query query, DocSet filter);非第一次的话会直接从cache中获取,即
if (filterCache != null) {
DocSet absAnswer = filterCache.get(absQ);
if (absAnswer!=null) {
if (positive) return absAnswer;
else return getPositiveDocSet(matchAllDocsQuery).andNot(absAnswer);
}
}
DocSet absAnswer = getDocSetNC(absQ, null);
DocSet answer = positive ? absAnswer : getPositiveDocSet(matchAllDocsQuery).andNot(absAnswer);
if (filterCache != null) {
// cache negative queries as positive
filterCache.put(absQ, absAnswer);
}
继续查阅方法getDocSetNC(Query query, DocSet filter)可以发现当filter不存在。且query为TermQuery时,实现如下:
if (query instanceof TermQuery) {
Term t = ((TermQuery)query).getTerm();
SolrIndexReader[] readers = reader.getLeafReaders();
int[] offsets = reader.getLeafOffsets();
int[] arr = new int[256];
int[] freq = new int[256];
for (int i=0; i<readers.length; i++) {
SolrIndexReader sir = readers[i];
int offset = offsets[i];
collector.setNextReader(sir, offset);
TermDocs tdocs = sir.termDocs(t);
for(;;) {
int num = tdocs.read(arr, freq);
if (num==0) break;
for (int j=0; j<num; j++) {
collector.collect(arr[j]);
}
}
tdocs.close();
}
其实情况则直接调用lucene的super.search(query, luceneFilter, collector);
而SolrIndexSearcher.search(query,filter,n,sort)则是直接调用lucene的同名方法;
分享到:
相关推荐
资源名称:相关性搜索 利用Solr与Elasticsearch创建智能应用内容简介:《相关性搜索:利用Solr与Elasticsearch创建智能应用》揭开了相关性搜索的神秘面纱,告诉大家如何将 Elasticsearch与 Solr这样的搜索引擎作为可...
标题“Relevant search with applications for Solr and Elasticsearch”以及描述“Relevant search with ...相关搜索(Relevant Search)**在**Solr**和**Elasticsearch**这两种流行全文搜索引擎中的实现与应用...
Solr、Elasticsearch和Lucene是三个在搜索引擎领域中至关重要的技术,它们共同构建了现代数据检索的基础架构。下面将分别对这三个组件进行详细解释,并探讨它们之间的关系。 **Lucene** Lucene是一个高性能、全文本...
本部分中文翻译主要涵盖了Solr的快速入门、Schema设计和文本分析以及索引与搜索的基本操作。 1. **快速入门(开启Solr之旅)** 这部分内容介绍了如何启动和配置Solr服务器。Solr通常运行在Jetty或Tomcat等Servlet...
Solr 1.4 版本在2009年由Packt Publishing出版的一本书中被详细介绍,该书由David Smiley和Eric Pugh共同编写。Solr 1.4 为企业提供了多种高级搜索特性,如分面导航(faceted navigation)、结果高亮(result ...
Solr Search是一个基于Apache Lucene的全文搜索引擎服务器,它提供了高效、可扩展的搜索和索引功能。在本文中,我们将深入探讨Solr的核心概念、关键特性以及如何使用Solr进行搜索。 一、Solr核心概念 1. 索引:Solr...
Title: Apache Solr Search Patterns Author: Jayant Kumar Length: 250 pages Edition: 1 Language: English Publisher: Packt Publishing Publication Date: 2015-03-31 ISBN-10: 1783981849 ISBN-13: ...
在大数据和搜索引擎领域,Elasticsearch (ES) 和 Apache Solr 都是广泛使用的开源技术,它们都基于 Lucene 库,提供高性能、可扩展的全文搜索和分析能力。然而,两者在设计哲学、使用场景、功能特性以及社区支持等...
Solr提供了两种主要的`SolrCache`接口实现类,即`solr.search.LRUCache`和`solr.search.FastLRUCache`。 1. **solr.search.LRUCache**:基于LRU(Least Recently Used,最近最少使用)算法实现,适用于需要根据访问...
**Solr:开源企业搜索引擎** ...通过阅读《开源企业搜索引擎SOLR的应用教程》PDF,你将深入了解Solr的工作原理、配置方法以及如何在实际项目中部署和使用Solr,从而提升你的企业级搜索解决方案的设计和实施能力。
在实际应用中,Elasticsearch与Solr的选择往往取决于项目需求和团队的技术栈。Elasticsearch的轻量级特性适合快速开发,尤其对于需要实时分析和数据可视化的企业级应用。而Solr因为有较丰富的查询语言和管理工具,更...
在实际应用中,ElasticSearch 和 Solr 都有其优缺点。以下是一些关键的比较: 1. 当单纯的对已有数据进行搜索时,Solr 更快。 2. 当实时建立索引时,Solr 会产生 io 阻塞,查询性能较差,ElasticSearch 具有明显的...
下面将详细介绍Solr中的中文分词器及其相关知识。 一、Solr中文分词器概述 在处理中文文档时,由于中文句子没有明显的分隔符,如英文的空格,因此需要使用分词器进行预处理。Solr支持多种中文分词器,如IK Analyzer...
ES(ElasticSearch)和Solr都是基于Lucene的搜索引擎,它们各自提供了一套搜索框架,用于实现高效的全文搜索功能。由于两者都是在Apache License 2下开源的,因此在选择使用哪种搜索方案时,需要根据不同的使用场景...
在深入探讨Solr-search过程的源码分析时,我们聚焦于关键步骤与核心组件,以求全面理解Solr搜索机制的内部运作。Solr作为一款高性能、可伸缩的开源搜索平台,其搜索处理流程涉及多个层次的组件交互与数据处理,其中...
由于名称中包含了"solr5",这可能意味着该版本最初是为Solr 5设计的,但通过更新和调整,现在已经可以兼容到Solr 7.5。 2. `ext.dic`: 这是一个扩展词典文件,用于添加自定义词汇或者行业特定词汇。用户可以根据...