搜索系统13:一个查询从solr到lucene都干了些什么事?

lucene、solr区别 Lucene是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎. Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索 阅读详情

用了solr一段时间后,我想了解下solr是如何包装lucene。因为使用过程中几乎没有遇到直接操作lucene代码的情况,这让我有些迷糊。今天来看看一个solr查询的执行过程,经过debug发现了以下堆栈。


再看堆栈顶的方法里的lucene工具类:


哈,这就是lucene类了。这个时候就可能产生很多疑问了,solr不是分core/collection么,这里怎么没有体现?solr不是有缓存么,这里怎么没有看到缓存?


为了回答这些问题,我们从头来梳理这个查询过程。

1.从web.xml的Filter开始。

我的请求url是localhost:8080/solr_web/core/select?q=*:* 。这个url会匹配到上面的Filter。

2.在SolrDispatchFilter的doFilter方法中生成HttpSolrCall并调用其call方法:

这个call方法调用了一个init方法,这个方法从request取到了core的名称,并且获取这个core单独的handler:


3.执行调用链HttpSolrCall.execute->SolrCore.execute->SearchHandler.handleRequest/handleRequestBody。

这个方法中会遍历几种组件(SearchComponent)进行处理,本文涉及的是QueryComponent,进入它的process方法。

这里面根据参数会有对id,group by 等参数的特殊处理,我们先不关注这些。再进入SolrIndexSearcher.search/getDocListC方法。
缓存就是getDocListC用到的。如下:



这里有个filter的判断,这个filter我查了下并没有设置值的地方,所以正常的都为空。如果没有特殊配置应该都会进来判断一下缓存。


下面重点了解下缓存机制:
a.缓存的key是什么?

从上面代码上看是QueryResultKey对象,这不够具体。我们看看得到缓存的数据的过程,首先是queryResultCache.get(key),进入LRUCache的get方法就会发现这就是一个LinkedHashMap.get方法,那key的值实际上就是QueryResultKey.hashCode的返回值了。它是怎么计算的?从下图可以看出来,他就是全部搜索条件计算出来的一个hashcode。


b.缓存什么时候过期?

看一下LRUCache的init方法,会发现这个秘密。


它就是用了个LinkedHashMap,而LRU的并不是它实现的,是LinkedHashMap实现的。这里介绍一下LRU,它是Least recently used,最近最少使用算法。最近的意思是在队列前的,LinkedHashMap最先加入的元素。最少的意思最少被访问(get)的。下图这个图比形象:


而LinkedHashMap如何实现上面那个图的呢?1就不用说了,就是往队尾加。3也简单就是从队首移除。2是get方法做些处理,看LinkedHashMap源码:

如果accessOrder这个参数为true的时候,就会对链表作一个移动的操作,我就不贴afterNodeAccess的源码了。这正是LRUCache用的方法,见上面的图里的map = new LinkedHashMap(initialSize, 0.75f, true)这第三个参数正是accessOrder。


好了,缓存的分析结束了,知道了这些对我们设置缓存的大小的设置、理解缓存生效时间都有帮助吧。如果查询没有命中缓存,程序就会执行到本文第一张图的第一行方法,这个方法基本就是直接调用lucene的查询方法了。

最后来梳理下整个查询流程:


CD-SSB和NCD-SSB相关内容 NR中,PSS/SSS 和PBCH总是绑定的,因此也称为SSB block。频域由下往上,第121个SC(k = 120)的中心频率,就是SSB的GSCN对应的SSREF(同步参考频率)的出处如上,同步栅格映射到SSB 的RE位置是10个PRB的位置,然后指向RE index 0,即第121个子载波的中心频率;UE获得N_offset_GSCN后,即可结合当前SSB的GSCN推算下一个SSB的GSCN =N_Reference_GSCN(当前SSB的GSCN) + N_offset_GSCN。 阅读详情

相关推荐

【PADS-开发指南】

馒头破戒大师

sinat_23896491的博客 3225

Solr简介,功能,特性

1,什么是solr? Solr是一个独立的企业级搜索应用服务器,他对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务提供一定格式的xml文件,生成索引;也可以通过http get 操作提供查找请求,并得到xml格式的返回结果 2.,solr特点 Solr是一个高性能,采用java语言,基于Lucene开发的全文搜索服务器。并对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置,可扩展并对查询性能进行了优化,提供了一个完善的功能管理页面,是一款非常优

wy122222222的博客 1892

Codex CLI 的多模型切换实战:如何在中转 API 环境下灵活选择最佳模型

本文详细介绍了在Codex CLI中实现多模型切换的实战技巧,重点解析了如何在中转API环境下灵活选择最佳AI模型。通过配置Node.js环境和智能路由策略,开发者可以根据任务类型、编程语言和成本考量,在GPT-5、Claude和DeepSeek等模型间高效切换,提升代码生成、审查和优化的效率。

weixin_29291185的博客 837

solr基础理解和功能分析

一、solr概述 Solr是一个开源搜索平台,用于构建搜索应用程序。 它建立在Lucene(全文搜索引擎)之上。Solr是一个可扩展的,可部署,搜索/存储引擎,优化搜索大量以文本为中心的数据。 二、solr管理界面功能 1.Logging 展示Solr的日志,不用去后台查日志,还可以用来配置打印日志级别。 2.Core Admin 支持SolrCore的基本操作。 主要有 Add Core(添加核心), Unload(卸载核心),Rename(重命名核心),Reload(重 新加载核心),Opt

qq_41585300的博客 6197

使用Dify打造视频生成工作流:从提示词到视频的完整指南

Dify作为开源LLM应用开发平台,通过可视化工作流编排实现从文本到视频的端到端生成,将创意周期从天级缩短至分钟级。核心流程包括提示词工程、视频API调用、存储分发和结果反馈。

牛奶夹心巧克力 3435

二阶锥松弛在配电网最优潮流计算中的应用(IEEE33节点配电网最优潮流算例matlab程序)(yalmip+cplex)

文献[7]建立了以支路潮流计算为基础的OPF模型,针对OPF中的非凸性约束,采用SOCR技术将其松弛为二阶锥约束,整个 OPF 模型则被转化为二阶锥规划( Second Order Cone Programming,SOCP)问题,对其求解可以得到全局最优解。其次结合辐射型配电网潮流特点建立支路潮流约束,并考虑配电网中的可控单元,包括分布式电源和离散、连续无功补偿装置,建立其出力约束,该模型为非凸非线性模型;式中,αj,t和βij,t分别为t时段内节点i电压的二次方和支路ij电流的二次方。

weixin_47365903的博客 1万+

solr简介和使用

一、搜索功能的流行方案由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择: 1、基于Lucene自己进行封装实现站内搜索。工作量及扩展性都较大,不采用。 2、调用Google、Baidu的API实现站内搜索。同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,暂时不采用。 3、 基于Compass+Lucen

想作会飞的鱼的博客 2万+

保姆级教程:在STM32CubeIDE上快速部署micro_ros到STM32F407(附常见问题解决)

本文提供了一份详细的保姆级教程,指导开发者如何在STM32CubeIDE上快速部署micro_ros到STM32F407微控制器。内容涵盖从Windows与Ubuntu双环境搭建、micro-ROS静态库编译、STM32CubeIDE工程深度集成,到串口通信联调与常见问题解决的完整流程,旨在帮助读者构建稳定可靠的ROS2与嵌入式设备通信系统。

o4p5q6r7s的博客 324

solr是做什么的?核心技术原理?

为什么要使用solr呢? 大多数搜索引擎应用都必须具有某种搜索功能,问题是搜索功能往往是巨大的资源消耗,并且它们会由于沉重的数据库加载而拖垮你的应用的性能。这就是为什么转移负载到一个外部的搜索服务器的主要原因,Apache Solr 是一个流行的开源搜索服务器,它通过使用类似 REST 的 HTTP API,确保你能从几乎任何编程语言来使用 solr。Solr 是一个开源搜索平台,用于构建搜索应...

ab3344556677的博客 2105

Ubuntu 22.04/24.04 安装 ROS2 完整教程(Humble / Jazzy)

最后更新:2026年2月适用系统:Ubuntu 22.04 LTS(Jammy) / Ubuntu 24.04 LTS(Noble)适用架构:x86_64 / arm64(包括树莓派)

2401_84116277的博客 6015

猫群优化算法(CSO)详解:从生物灵感到智能优化

猫群优化算法(CSO)是一种模拟猫科动物行为的群体智能优化算法。该算法基于猫的两种主要行为模式:搜寻状态(全局探索)和跟踪状态(局部开发)。CSO通过混合率(MR)动态调整两种模式的比例,实现探索与开发的平衡。算法核心包括搜寻模式的变异操作和跟踪模式的速度-位移模型,具有收敛性能好、全局搜索能力强等特点。相比传统优化算法,CSO在高维复杂问题中表现优异,已成功应用于函数优化、图像处理等多个领域。算法性能受混合率、变化域等参数影响,自适应参数策略可进一步提升优化效果。

qq_42212808的博客 620

为什么使用solr----solr与Lucene比较及solr 的结构分析

原文链接:http://www.aboutyun.com/thread-7018-1-1.html 本帖最后由 nettman 于 2014-2-28 22:46 编辑 可以带着下面问题来阅读: 1.搜索为什么使用solr? 2.一个索引越来越大,solr是如何应对的? 3.Solr是什么,一句话描述? 4.solr比Lucene有什么优势? 一、Lu

longfei89的专栏 4101

基于Simulink的永磁同步电机力位混合控制(导纳+位置)仿真

本文详细介绍了基于Simulink的永磁同步电机(PMSM)力位混合控制系统实现方法。主要内容包括:1) 通过导纳控制原理(二阶质量-阻尼-弹簧模型)实现机器人柔顺控制;2) 在Simulink中构建虚拟环境、导纳控制器、PMSM驱动系统等完整框架;3) 针对曲面恒力打磨场景,实现20N恒力跟踪(RMS误差1.2N)和位置顺应;4) 支持纯位置/导纳/恒力三种工作模式切换;5) 提供系统性能评估指标和高级扩展功能。该方案显著提升了机器人环境交互的安全性和适应性,适用于精密装配、人机协作等应用场景。

xiaoheshang_123的博客 147

科普向 | Lucene,Solr,Elasticsearch之间的区别和联系

        最近有幸研究到了这块领域的内容,而我本人也对于这块非常的感兴趣,所以打算写一篇文章记录一下… 简介 Lucene         Lucene是 apache 软件基金会某个项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本

大数据梦想家 2251

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Lucene和Solr 学习目录

几个概念先行说明一下: Lucene: 是一个索引与搜索类库,而不是完整的程序。 Solr:是一个高性能,采用Java5开发,基于Lucene的一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。 Nutch:是一个由Java实现的,刚刚诞生开放源代码(open-source)的web搜索引擎。 Hadoop:  实现了一个分布式文件系统(Hadoop Di

天涯人 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

基于Lucene的全文搜索服务器Solr

一、Solr的基本概念 1.Solr的基本概念 1.1 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;通过Http Get操作提出查找请求,并得到XML格式的返回结果。 1.2 Solr是apache的开源项目,它使用java语言开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,Solr可配置、可扩展并对查询性能进行了优化,提供了一个

飞奔的嗨少 513

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Lucene,Solr,Elasticsearch之间的区别和联系

https://blog.youkuaiyun.com/weixin_44318830/article/details/109166004 简介 Lucene Lucene是 apache 软件基金会某个项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。顺便提一下,Lucene最初是由Doug Cutting开发的,没错,就是那个创造了大数据Hadoop的...

MyDriverC 502

lucene查询语法

lucene查询语法 一、 使用Query子类去查询1. MatchAllDocsQuery [AppleScript]纯文本查看复制代码 ? 1 2 3 //查询所有文档 Query query = new MatchAllDocsQuery(); // 相当于查询语法 : *:* ...

heima201907的博客 851

solr教程从入门到精通(solr5搜索引擎)-任亮-专题视频课程

solr教程从入门到精通(solr5搜索引擎)—8191人已学习 课程介绍 Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 课程收益 Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucen...

1284

视频教程-Lucene全文检索框架+Solr搜索引擎(2018版.Java)-Java

Lucene全文检索框架+Solr搜索引擎(2018版.Java) 拥有10...

weixin_30955287的博客 239

lucene/solr的缺点

http://iloseyou.iteye.com/blog/1846532 1、 http 请求做了cache,有时候会出现新数据不可见,cache滞后的问题。—cache优化下也不是问题  2、 admin 后台页面,支持中文、复杂查询语法上,欠友好。—自己稍加扩展也不是问题  3、swap core的时候,单结点多core,并且core对应的索引比较大的时候,切换过程出现内存2倍化

iTer的专栏 2732

SOLR面试题系列

1、Apache Solr是什么? Solr是Apache下的一个顶级开源项目,采用Java开发,是基于Lucene的全文搜索服务器。提供比Lucene更为丰富的查询语言,实现了可配置、可扩展,对索引、搜索性能进行了优化 为什么要solr: 1.solr是将整个索引操作功能封装好了的企业级搜索引擎产品 2.solr可以部署到单独的服务器上,它可以提供服务,降低了业务系统的负载 3.solr部署在专门的服务器上,它的索引库就不会受业务系统服务器存储空间的限制 ...

CancerKing的博客 1399

solr MySQL 比较_solr 和 elasticsearch 搜索引擎对比

从两个方面对ElasticSearch和Solr进行对比,从关系型数据库中的导入速度和模糊查询的速度。单机对比11. Solr 发布了4.0-alpha,试了一下,发现需要自己修改schema,好处是它自带一个data importer。在自己的计算机上测试了一下,导入的性能大概是:14分钟导入 3092730 条记录,约合 3682条/秒。2. 3百万条记录的情况下,模糊查询和排序基本都在1秒...

weixin_33933280的博客 417

Solr\Lucene优劣势分析

最早lucene2.4以及以前,追溯到2008年前后,lucene刚刚引起大家的关注,到后来Nutch 、solr的出现,lucene变得更加热。Nutch、Solr的发展,极大推动了lucene的升级。 对于一些接触过搜索,使用过lucene、solr的人来说,一般都会感觉lucene、solr很牛逼。我个人也认为solr、lucene确实非常NB,他涵盖了信息检索的几乎全部基础知识和非常高

上帝之手 3071
上一篇: 智能小车44:最小系统其实很简单
下一篇: 搜索系统14:HttpClient怎么有两个超时参数,都该怎么配?
中中_软件工程师
博客等级 码龄20年 76粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值