`
huangfoxAgain
  • 浏览: 37285 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

[ solr - searching ] - Searching过程粗略梳理

 
阅读更多

solr-searching过程分析(一)

——searching过程粗略梳理

 

下午看了一会solr的启动过程,往细的看相当繁琐。换个头绪先看看solr的searching过程。

 

1.拦截请求,解析请求并构建相应的handler。

发送检索请求,例如:http://localhost:8983/solr3.5/core2/select/?q=*%3A*&version=2.2&start=0&rows=10&indent=on

首先他将被SolrDispatchFilter拦截。

doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

通过对request的分析,获知当前request是做什么的(/select),并构造相应的handler(SearchHandler)。

 

2.SolrCore出面处理上层工作(具体工作交由handler处理)

将handler、SolrQueryRequest、SolrQueryResponse交由solrCore的execute方法处理

public void execute(SolrRequestHandler handler, SolrQueryRequest req, SolrQueryResponse rsp)

在该方法中主要还是由handler来完成的。

SolrRequestHandler是一个接口,他主要的方法就是:

public void handleRequest(SolrQueryRequest req, SolrQueryResponse rsp);

SolrRequestHandler的实现类的结构图如下:

其中RequestHandlerBase为大部分的Handler实现了部分功能,主要包括

public void handleRequest(SolrQueryRequest req, SolrQueryResponse rsp){
  ......
  handleRequestBody( req, rsp );
  ......
}

然而具体怎么做就交给具体的子类去执行了!(handleRequestBody( req, rsp );)

例如:这里是做检索,那么就交由SearchHandler处理。

(这里的设计方式有点类似于servlet,GenericSerlet实现了一些公用方法,而具体的则有其子类完成,例如HttpServlet)

 

3.SearchHandler具体的检索过程

现在的检索没有使用shards,在跟踪代码的过程中,发现以下过程是检索的主要环节。

if(!rb.isDebug()) {
        // Process
        for( SearchComponent c : components ) {
         <strong> c.process(rb);</strong>
        }
      }

从中可知真正的检索需要经过多个SearchComponent,在当前的实验环境下包括6个,如下:

 

4.各个SearchComponent配合工作完成检索

我们先重点了解QueryComponent。

获得SolrIndexSearcher,这个对象是检索的主要执行者。

同时获取SolrIndexSearcher.QueryCommand、SolrIndexSearcher.QueryResult,并将其作为查询条件和查询结果提交给SolrIndexSearcher进行检索。

searcher.search(result,cmd);

在SolrIndexSearcher中search方法如下:

public QueryResult search(QueryResult qr, QueryCommand cmd) throws IOException {
    <strong>getDocListC(qr,cmd);</strong>
    return qr;
  }

getDocListC又是一个比较复杂的方法,在这里加入的cache。

如果当前检索被缓存了(缓存也是个重点内容,后续详细分析!),那么直接返回结果,否则重新进行检索,检索的方法是:

private void getDocListNC(QueryResult qr,QueryCommand cmd)

在该方法中,和我们使用lucene进行检索十分相似,采用的具体方法是:

super.search(query, luceneFilter, collector);

检索完成将结果进行封装,放入QueryResult当中。

qr.setDocList(new DocSlice(0,sliceLen,ids,scores,totalHits,maxScore));

检索完成后,将结果放入缓存中,“造福后人”!

至此QueryComponent的工作就算完成了。

如果做简单查询(如:http://localhost:8983/solr3.5/core2/select/?q=*%3A*&version=2.2&start=0&rows=10&indent=on

那么后面5个Component就直接过了(没有真正被执行)。

 

5.收尾工作

将结果封装好,写入相应的ResponseHeaders,关闭SolrQueryRequest、solrCore。

 

-----------------------------------------------------

以上是solr-searching最粗略的过程,本着先脉络后细节的思想,以后再对各个重要环节做深入分析。

searching主要执行方法如下:

SolrDispatchFilter(doFilter,execute)

->SolrCore(execute)

->RequestHandlerBase(handleRequest)

->SearchHandler(handleRequestBody) //有可能执行多个Component

->QueryComponent(process)

->SolrIndexSearcher(search,getDocListC)

分享到:
评论

相关推荐

    solr-mongo-importer-1.1.0.jar

    solr-mongo-importer-1.1.0.jar solr-mongo-importer-1.1.0.jar solr-mongo-importer-1.1.0.jar

    apache-solr-dataimportscheduler-1.0.zip_official54l_solr 5.x定时生成

    "apache-solr-dataimportscheduler-1.0.zip"是一个官方发布的54l版本,专门针对Solr 5.x的定时索引生成需求。 数据导入调度器(DataImportScheduler)是这个扩展的核心组件,它允许用户根据预设的时间间隔自动执行...

    solr增量更新架包apache-solr-dataimportscheduler.jar

    "apache-solr-dataimportscheduler.jar" 是一个专门为Solr设计的扩展包,用于实现自动化的数据增量更新调度。 首先,我们要理解Solr的数据导入过程。Solr使用DataImportHandler(DIH)来从关系型数据库、XML文件或...

    solr-import-export-json最新代码

    solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-export-json最新代码solr-import-...

    apache-solr-3.5.0.jar

    这个名为"apache-solr-3.5.0.jar"的压缩包包含两个关键组件:`apache-solr-core-3.5.0.jar`和`apache-solr-solrj-3.5.0.jar`,它们对于成功搭建Solr 3.5.0环境至关重要。 1. `apache-solr-core-3.5.0.jar`: 这是...

    solr-dataimporthandler的jar包

    1. `solr-dataimporthandler-6.0.1.jar`:这是 DIH 的主库,包含了处理数据导入过程所需的类和方法。它提供了数据源连接、查询执行、数据转换以及索引创建等功能。在 Solr 的 lib 目录下添加此 JAR 文件后,Solr 将...

    solr-dataimport-scheduler.jar 可使用于solr7.x版本

    Solr 数据导入调度器(solr-dataimport-scheduler.jar)是一个专门为Apache Solr 7.x版本设计的组件,用于实现数据的定期索引更新。在理解这个知识点之前,我们需要先了解Solr的基本概念以及数据导入处理...

    Apache Solr(solr-8.11.1.tgz)

    Solr-8.11.1是该软件的一个特定版本,包含了最新的特性和改进。 在"solr-8.11.1.tgz"这个压缩包中,我们可以期待找到以下关键组成部分: 1. **Solr WAR 文件**:这是核心的搜索服务器应用程序,通常命名为`solr....

    solr(solr-9.0.0.tgz)

    Solr-9.0.0是该软件的最新版本,此版本可能包含了一些新的特性和改进,比如性能优化、新的查询语法、更强大的分析器等。 在Solr-9.0.0的压缩包中,通常会包含以下组件: 1. **bin** 文件夹:这个目录下有启动和...

    最新版linux solr-8.8.2.tgz

    首先,你需要从 Apache 官方网站下载 `solr-8.8.2.tgz` 文件。完成下载后,使用 `tar` 命令解压文件: ``` tar -zxvf solr-8.8.2.tgz ``` 2. **配置环境变量**: 为了方便使用 Solr 的命令行工具,可以将 Solr...

    solr(solr-9.0.0-src.tgz)源码

    这里我们将围绕"solr-9.0.0-src.tgz"这个源码包,详细探讨其主要组成部分、核心功能以及开发过程中的关键知识点。 1. **Solr架构** Solr的架构基于Lucene,一个强大的全文搜索引擎库。它提供了分布式、可扩展、高...

    solr-7.4.0.zip

    标题"solr-7.4.0.zip"表明这是一个包含了Solr 7.4.0版本的压缩包文件,该版本发布于2018年,包含了完整的Solr服务器及其相关组件。 在描述中提到,“solr7需要java8环境”,这是因为Solr的运行依赖于Java平台,特别...

    mmseg4j-solr-2.4.0.jar

    本文将深入探讨mmseg4j在Solr中的应用,以及如何在Solr 6.3版本中集成并使用mmseg4j-solr-2.4.0.jar这个库。 首先,mmseg4j是由李智勇开发的一个基于Java的中文分词工具,它的全称是“Minimum Match Segmentation ...

    solr-dataimportscheduler-1.1.1.jar

    Solr-dataimportscheduler-1.1.1.jar 是一个针对Apache Solr的扩展插件,主要功能是实现数据的增量导入。Apache Solr是一个流行的开源全文搜索引擎,它提供了高效的搜索和索引能力,广泛应用于网站内容检索、产品...

    solr6--solr-dataimporthandler-scheduler-1.1

    在"solr6--solr-dataimporthandler-scheduler-1.1"这个项目中,我们关注的重点是DIH的调度功能,也就是如何定期自动更新Solr索引。 DataImportHandler(DIH)是Solr的一个插件,用于从关系型数据库或其他结构化数据...

    solr-dataimporthandler-4.10.3.jar

    solr自动更新包

    支持solr6.1-solr-dataimport-scheduler-1.2.jar

    在 Solr 的生态系统中,`solr-dataimport-scheduler-1.2.jar` 是一个非常重要的组件,它允许用户定时执行数据导入任务,这对于需要定期更新索引的应用场景尤其有用。这个特定的版本 `1.2` 已经被优化以兼容 `Solr ...

    solr-data-import-scheduler

    solr 增量更新所需要的包 solr-dataimporthandler-6.5.1 + solr-dataimporthandler-extras-6.5.1 + solr-data-import-scheduler-1.1.2

    solr定时自动同步数据库需要用到的apache-solr-dataimportscheduler.jar包

    在标题提到的"solr定时自动同步数据库需要用到的apache-solr-dataimportscheduler.jar包"中,`apache-solr-dataimportscheduler.jar`是用于实现Solr数据导入计划任务的扩展插件。这个插件使我们能够设置定时任务,...

    solr5.5定时增量apache-solr-dataimportscheduler

    经测试apache-solr-dataimportscheduler1.0 版本在solr5.5上已经不能使用,这是本人自己根据情况修改后打的jar包亲测可用

Global site tag (gtag.js) - Google Analytics