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

目录
相关文章
|
存储 安全 Unix
/var/log/messages说明
【4月更文挑战第5天】`/var/log/messages`是类Unix系统(包括Linux)的日志文件,存储系统启动、关闭、内核消息、服务状态和服务错误等信息。内容可能因配置和日志系统(如syslog、rsyslog、journald)不同而变化。现代Linux可能使用`journalctl`等工具访问journald日志,提供更强大管理功能。
2066 1
/var/log/messages说明
|
14天前
|
JSON NoSQL Java
RedisTemplate和StringRedisTemplate的区别及个人见解
RedisTemplate和StringRedisTemplate的区别及个人见解
82 4
|
8月前
|
人工智能 JavaScript Java
深度测评国产 AI 程序员,在 QwQ 和满血版 DeepSeek 助力下,哪些能力让你眼前一亮?
阿里云发布并开源全新的推理模型通义千问QwQ-32B。通过大规模强化学习,千问QwQ-32B在数学、代码及通用能力上实现质的飞跃,整体性能比肩DeepSeek-R1。在保持强劲性能的同时,千问QwQ-32B还大幅降低了部署使用成本,在消费级显卡上也能实现本地部署。
745 57
|
JavaScript 前端开发 数据安全/隐私保护
Web开发者必看:手把手教你如何轻松播放m3u8流地址,解锁视频播放新技能,让你的项目更上一层楼!
【10月更文挑战第23天】随着互联网技术的发展,m3u8格式因良好的兼容性和高压缩率被广泛用于网络流媒体传输。本文介绍如何在Web端播放m3u8流地址,包括引入视频播放器(如Video.js)、创建播放器容器、初始化播放器及播放m3u8流的具体步骤。此外,还涉及处理加密m3u8流的示例。
2540 1
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9-2):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
|
11月前
|
Java 编译器
Java 泛型详细解析
本文将带你详细解析 Java 泛型,了解泛型的原理、常见的使用方法以及泛型的局限性,让你对泛型有更深入的了解。
372 2
Java 泛型详细解析
|
Java 数据格式 Spring
一文全面深入了解Spring中的@Value注解
一文全面深入了解Spring中的@Value注解
3047 0
一文全面深入了解Spring中的@Value注解
|
人工智能 JavaScript IDE
蚂蚁智能研发助手CodeFuse来了!支持40余种编程语言
祝各位开发者节日快乐!今天,在这个特殊的日子里,我为大家带来一份小礼物——蚂蚁出品的智能研发助手 CodeFuse~
734 0
蚂蚁智能研发助手CodeFuse来了!支持40余种编程语言
|
存储 消息中间件 负载均衡
RocketMQ 5.0的负载均衡
RocketMQ 5.0的负载均衡
242 2
|
存储 Java 编译器
Java中的泛型
Java中的泛型
156 0