`
yuaqian2003
  • 浏览: 13759 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

有关Solr中SolrIndexSearcher的search和getDocSet的差别

阅读更多
  最近项目中碰到问题,发现在调用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创建智能应用内容简介:《相关性搜索:利用Solr与Elasticsearch创建智能应用》揭开了相关性搜索的神秘面纱,告诉大家如何将 Elasticsearch与 Solr这样的搜索引擎作为可...

    Relevant search with applications for Solr and Elasticsearch

    标题“Relevant search with applications for Solr and Elasticsearch”以及描述“Relevant search with ...相关搜索(Relevant Search)**在**Solr**和**Elasticsearch**这两种流行全文搜索引擎中的实现与应用...

    Solr Elasticsearch lucene 搜索引擎

    Solr、Elasticsearch和Lucene是三个在搜索引擎领域中至关重要的技术,它们共同构建了现代数据检索的基础架构。下面将分别对这三个组件进行详细解释,并探讨它们之间的关系。 **Lucene** Lucene是一个高性能、全文本...

    Apache Solr 3 Enterprise Search Server 部分中文翻译

    本部分中文翻译主要涵盖了Solr的快速入门、Schema设计和文本分析以及索引与搜索的基本操作。 1. **快速入门(开启Solr之旅)** 这部分内容介绍了如何启动和配置Solr服务器。Solr通常运行在Jetty或Tomcat等Servlet...

    Solr 1.4 Enterprise Search Server.pdf

    Solr 1.4 版本在2009年由Packt Publishing出版的一本书中被详细介绍,该书由David Smiley和Eric Pugh共同编写。Solr 1.4 为企业提供了多种高级搜索特性,如分面导航(faceted navigation)、结果高亮(result ...

    solr search

    Solr Search是一个基于Apache Lucene的全文搜索引擎服务器,它提供了高效、可扩展的搜索和索引功能。在本文中,我们将深入探讨Solr的核心概念、关键特性以及如何使用Solr进行搜索。 一、Solr核心概念 1. 索引:Solr...

    Apache.Solr.Search.Patterns.1783981849

    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: ...

    es与solr的区别_solr_ES_es与solr的区别_elasticsearch_

    在大数据和搜索引擎领域,Elasticsearch (ES) 和 Apache Solr 都是广泛使用的开源技术,它们都基于 Lucene 库,提供高性能、可扩展的全文搜索和分析能力。然而,两者在设计哲学、使用场景、功能特性以及社区支持等...

    solr中cache综述

    Solr提供了两种主要的`SolrCache`接口实现类,即`solr.search.LRUCache`和`solr.search.FastLRUCache`。 1. **solr.search.LRUCache**:基于LRU(Least Recently Used,最近最少使用)算法实现,适用于需要根据访问...

    sss.rar_solr_solr search

    **Solr:开源企业搜索引擎** ...通过阅读《开源企业搜索引擎SOLR的应用教程》PDF,你将深入了解Solr的工作原理、配置方法以及如何在实际项目中部署和使用Solr,从而提升你的企业级搜索解决方案的设计和实施能力。

    搜索引擎选择: Elasticsearch与Solr - 叽歪.pdf

    在实际应用中,Elasticsearch与Solr的选择往往取决于项目需求和团队的技术栈。Elasticsearch的轻量级特性适合快速开发,尤其对于需要实时分析和数据可视化的企业级应用。而Solr因为有较丰富的查询语言和管理工具,更...

    Solr和ElasticSearch分析比较.docx

    在实际应用中,ElasticSearch 和 Solr 都有其优缺点。以下是一些关键的比较: 1. 当单纯的对已有数据进行搜索时,Solr 更快。 2. 当实时建立索引时,Solr 会产生 io 阻塞,查询性能较差,ElasticSearch 具有明显的...

    solr 5.x 和 6.x 最新中文分词器

    下面将详细介绍Solr中的中文分词器及其相关知识。 一、Solr中文分词器概述 在处理中文文档时,由于中文句子没有明显的分隔符,如英文的空格,因此需要使用分词器进行预处理。Solr支持多种中文分词器,如IK Analyzer...

    ES和solr搜索方案对比

    ES(ElasticSearch)和Solr都是基于Lucene的搜索引擎,它们各自提供了一套搜索框架,用于实现高效的全文搜索功能。由于两者都是在Apache License 2下开源的,因此在选择使用哪种搜索方案时,需要根据不同的使用场景...

    Solr-search过程源码分析

    在深入探讨Solr-search过程的源码分析时,我们聚焦于关键步骤与核心组件,以求全面理解Solr搜索机制的内部运作。Solr作为一款高性能、可伸缩的开源搜索平台,其搜索处理流程涉及多个层次的组件交互与数据处理,其中...

    ikanalyzer-solr中文分词包兼容solr7.5

    由于名称中包含了"solr5",这可能意味着该版本最初是为Solr 5设计的,但通过更新和调整,现在已经可以兼容到Solr 7.5。 2. `ext.dic`: 这是一个扩展词典文件,用于添加自定义词汇或者行业特定词汇。用户可以根据...

Global site tag (gtag.js) - Google Analytics