【转】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

目录
相关文章
|
7月前
|
SQL 消息中间件 缓存
执行流程优化总结
本文总结了五种优化方法:1) 将循环内的IO和远程调用批量化,减少重复请求;2) 优化数据库SQL和索引以提升查询速度;3) 对常用查询结果进行缓存;4) 并行化串行远程调用(注意可能引发内存问题和上下文丢失);5) 将非核心功能如消息通知、积分操作异步化,通过消息队列处理。
64 2
|
7月前
|
SQL 缓存 关系型数据库
一条SQL执行是如何执行的?它的执行流程是什么?跟我一起探索吧!
一条SQL执行是如何执行的?它的执行流程是什么?跟我一起探索吧!
一条SQL执行是如何执行的?它的执行流程是什么?跟我一起探索吧!
|
设计模式 缓存 前端开发
通过Debug探索SpringMVC执行过程
对SpringMVC的理解 MVC:MVC是一种设计模式 MVC的原理图: M-Model 模型(完成业务逻辑:有javaBean构成,service+dao+entity) V-View 视图(做界面的展示 jsp,html……) C-Controller 控制器(接收请求—>调用模型—>根据结果派发页面) SpringMVC工作原理 springMVC是一个MVC的开源框架,springMVC=struts2+spring,springMVC就相当于是Struts2加上sring的整合,但是这里有一个疑惑就是,springMVC和spring是什么样的关系呢?这个在百度百科上有一个很好
101 0
|
XML Java 数据格式
【spring源码系列-05】refresh中prepareRefresh方法的执行流程
【spring源码系列-05】refresh中prepareRefresh方法的执行流程
168 0
|
1月前
|
JavaScript 前端开发
Generator 函数的执行流程是怎样的?
【10月更文挑战第30天】Generator函数的执行流程通过 `next()` 方法的调用实现暂停和恢复执行,结合 `yield` 关键字以及参数传递和错误处理机制,提供了一种灵活而强大的编程模式,可用于处理异步操作、数据生成与迭代等多种复杂的编程任务。
|
6月前
|
Java
解析Java线程池:参数详解与执行流程
解析Java线程池:参数详解与执行流程
67 1
|
4月前
|
Rust 安全 程序员
|
5月前
|
JSON 前端开发 Java
一文带你深入理解SpringMVC的执行原理
【7月更文挑战第1天】阿里云产品初体验 SpringMVC的执行原理 本文分析的问题:文件上传的请求的处理、跨域的处理、是怎么找到目标方法的、目标方法的执行、目标方法参数的封装、返回值的处理、拦截器的执行、中间出现异常时的处理 涉及组件:文件上传解析器、跨域处理器、处理器映射器、处理器注册中心、处理器执行链、处理器适配器、参数解析器、数据绑定器、类型转换器、返回值处理器、内容协商管理器、消息转换器、异常解析器、
|
API Go 开发工具
CreateCollection_dataSyncService_执行流程源码解析
CreateCollection_dataSyncService_执行流程源码解析
85 0
|
存储 XML Java
【spring源码系列-06】refresh中obtainFreshBeanFactory方法的执行流程
【spring源码系列-06】refresh中obtainFreshBeanFactory方法的执行流程
112 0