【转】SolrQuery--EmbeddedServer执行流程回顾

简介: 假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。

image.png

TerminatorQueryRequest extends SolrQuery==

执行HSF封装的TerminatorService.query(SolrQuery),订阅了TerminatorService

==>这个HSF服务发布在:DefaultTerminatorService

==>回到DefaultTerminatorService中,找到query(SolrQuery )方法

==》这个方法里面依赖EmbeddedServer.query(query) 执行查询请求。

==EmbeddedServer extends SolrServerquery(query) 转入SolrServerquery(SolrParams)

TerminatorQueryRequest extend SolrQuery,SolrQuery extends ModifiableSolrParams, ModefiableSolrParams extends SolrParams

==》在SolrServer中执行了 QueryRequest( params).process(), 首先new QueryRequest对象。

==>接着QueryRequest. process() new QueryResponse( server.request( this ), server ); 返回response. 其中server. request() EmbededServer中的方法,执行结果作为QueryResponse

==》回到EmbededServer中的request方法中,

==》在EmbededServer.request中,通过core.getRequestHandler(path), 返回SolrRequestHandler

==》在EmbededServer.request中,core.execute(handler,req,rsp)

然后执行底层查询工作。而requestHandler是在solrcofig.xml 中配置注入。最终回到SolrCore ,由他管理整个core信息。包括cache信息的维护。

[1] SolrRequestHandler

Core.execute中,由SolrRequestHandler 管理 SolrQueryRequest+SolrQueryResponse

SolrRequestHandler中提取参数(paramssolrcore

SolrRequestHandler 是在solrconfig.xml中配置注入的,

SolrIndexSearcher 是被SolrQueryRequest管理起来,

 SolrRequestHandler handler = core.getRequestHandler( path );不同的path对应不同的SolrRequestHandler

==》在solrcoresolrcore.execute

==》在executesearchhandler会执行handler.handlerRequest()

==SolrRequestHandler.handleRequestBody()

==》其中重要一步是SearchComponent 加载

==query构件是必须要有的QueryComponent

==》在querycomponent内部先执行prepare

==》在querycomponent内容执行完了prepare之后执行process

==SolrQueryRequest.solrIndexSearcher.getDocSet()

==>结果putresoponse中返回

[2]SolrQueryRequest

EmbededSolrServer.request, SolrQueryRequest是由_parser.buildRequestFrom(core, params, request.getContentStreams() 生成,_parser = new SolrRequestParsers( null );

_parser.buildRequestFrom()方法里面,return SolrQueryRequestBase implements SolrQueryRequest,里面有RefCounted<SolrIndexSearcher> searcherHolder = core.getSearcher();,调用core.getSearcher() 返回得到solrIndexSearcher引用。

Coresearcher是被上层request共享的,上层request又是有缓存的,searcher又与cache一一绑定,而不是针对core层的缓存。

[3]SolrQueryResponse

EmbededSolrServer.request,new  SolrQueryResponse对象。

updateHandler是在solrcorecreateUpdateHandler() 生成的,反射方法生成该实例。不同的updateHandler set不同的对应更新目录。

org.apache.solr.handler.component.ResponseBuild 封装了SolrQueryRequestSolrQueryResponseSolrQueryRequest中封装了getSearcher(),返回SolrIndexSearcher

SearchComponent 主要子类如下,solrcoreloadSearchComponent默认会加载6(highlisght\query\facet\mlt\stats\debug)

query QueryComponent

debug DebugComponent

facet FacetComponent

highlight HighlighComponent

stats StatsComponent

terms TermsComponent

termVectors TermVectorComponent

mlt MoreLikeThisComponent

 

SolrIndexSearcher

目录
相关文章
|
5月前
|
SQL 消息中间件 缓存
执行流程优化总结
本文总结了五种优化方法:1) 将循环内的IO和远程调用批量化,减少重复请求;2) 优化数据库SQL和索引以提升查询速度;3) 对常用查询结果进行缓存;4) 并行化串行远程调用(注意可能引发内存问题和上下文丢失);5) 将非核心功能如消息通知、积分操作异步化,通过消息队列处理。
50 2
|
5月前
|
SQL 缓存 关系型数据库
一条SQL执行是如何执行的?它的执行流程是什么?跟我一起探索吧!
一条SQL执行是如何执行的?它的执行流程是什么?跟我一起探索吧!
一条SQL执行是如何执行的?它的执行流程是什么?跟我一起探索吧!
|
XML Java 数据格式
【spring源码系列-05】refresh中prepareRefresh方法的执行流程
【spring源码系列-05】refresh中prepareRefresh方法的执行流程
144 0
|
4月前
|
Java
解析Java线程池:参数详解与执行流程
解析Java线程池:参数详解与执行流程
46 1
|
2月前
|
Rust 安全 程序员
|
3月前
|
JSON 前端开发 Java
一文带你深入理解SpringMVC的执行原理
【7月更文挑战第1天】阿里云产品初体验 SpringMVC的执行原理 本文分析的问题:文件上传的请求的处理、跨域的处理、是怎么找到目标方法的、目标方法的执行、目标方法参数的封装、返回值的处理、拦截器的执行、中间出现异常时的处理 涉及组件:文件上传解析器、跨域处理器、处理器映射器、处理器注册中心、处理器执行链、处理器适配器、参数解析器、数据绑定器、类型转换器、返回值处理器、内容协商管理器、消息转换器、异常解析器、
|
5月前
|
前端开发 Java 定位技术
生活小事件(SpringMVC主要的组件及作用和执行流程)
Spring MVC 的主要组件包括 DispatcherServlet(核心,请求调度)、HandlerMapping(URL 映射到处理器)、HandlerAdapter(统一执行处理器)、Handler(处理业务逻辑,通常为 @Controller 类)、ViewResolver(视图解析)和 View(渲染输出)。通过这些组件的协作,Spring MVC 实现了从接收请求到返回响应的流程,类似于警察处理交通违规的协调过程。
|
11月前
|
API Go 开发工具
CreateCollection_dataSyncService_执行流程源码解析
CreateCollection_dataSyncService_执行流程源码解析
72 0
|
存储 XML Java
【spring源码系列-06】refresh中obtainFreshBeanFactory方法的执行流程
【spring源码系列-06】refresh中obtainFreshBeanFactory方法的执行流程
96 0
|
测试技术
Junit-3.8.1源码分析02----具体分析(执行流程)
上一篇我们总体了解了下junit框架的相关知识。这一篇我们将具体来分析相关的知识点。
69 0
Junit-3.8.1源码分析02----具体分析(执行流程)