先说明一下,我使用的是solr5.5.3
之前在一篇博客中FastLRUCache中有个重要的方法是warm,当时没有说什么意思,这篇博客就是介绍这个。
warm的意思就是热身,即当一个IndexSearcher因为提交要重新生成一个IndexSearcher的时候,要对新生成的searcher进行warm,我们看一下SolrCore这个类的getSearcher方法,在这个方法里,如果新打开的searcher和之前的searcher不一样(即说明索引发生了变化),就会对新的indexSearcher进行warm,
if (newSearcher != currSearcher) { // warm the new searcher based on the current searcher. // should this go before the other event handlers or after? if (currSearcher != null) { future = searcherExecutor.submit(new Callable() { @Override public Object call() throws Exception { try { newSearcher.warm(currSearcher);//对新的searcher调用warm方法, } catch (Throwable e) { SolrException.log(log, e); if (e instanceof Error) { throw (Error) e; } } return null; } }); } xxxx//如果新的searcher和之前的不一样,还会有其他的操作,这里专门跳出的warm方法
我们到solrIndexSearcher中看看warm方法,
for (int i=0; i<cacheList.length; i++) {//循环所有的cache,然后调用其对应的warm方法, try { this.cacheList[i].warm(this, old.cacheList[i]); } finally { if (debug) log.debug("autowarming result for " + this + "\n\t" + this.cacheList[i]); }
还是到FastLRUCache中去看看吧:
public void warm(SolrIndexSearcher searcher, SolrCache old) { if (regenerator == null) return;//regenerator在初始化一个SolrConfig的时候就会指定,不会是null long warmingStartTime = System.nanoTime(); FastLRUCache other = (FastLRUCache) old; // warm entries if (isAutowarmingOn()) {//这个是根据配置来的,如果我们在<filterCache>(只是举例,其他cache一样)中配置autowarmCount=0就不会进行warm, int sz = autowarm.getWarmCount(other.size());//得到要warm的缓存的大小,因为有的是按照百分比表示的,所以要计算真实大小。 Map items = other.cache.getLatestAccessedItems(sz); Map.Entry[] itemsArr = new Map.Entry[items.size()]; int counter = 0; for (Object mapEntry : items.entrySet()) { itemsArr[counter++] = (Map.Entry) mapEntry; } for (int i = itemsArr.length - 1; i >= 0; i--) { try { boolean continueRegen = regenerator.regenerateItem(searcher,this, old, itemsArr[i].getKey(), itemsArr[i].getValue());//使用regenerator来做warm。 。。。。。。//省略了很多不重要的。 }
还是要到regenerator中去看看这个方法,在org.apache.solr.search.SolrIndexSearcher.initRegenerators(SolrConfig)方法中就会创建多个regenerator,这个方法在创建一个SolrConfig的时候调用,即对在配置文件中出现的cache设置regenerator。他的实现很简单,就是根据原来缓存的key,使用心得searcher来查一遍,放到新的缓存中。
warm因为涉及的代码比较零乱,所以我没有贴代码,不过实现很简单,就是在一个searcher新建立之后将原来的searcher使用的那些缓存重新查一遍保存在新的seracher的cache中。
那么什么时候会重新建立一个searcher呢:1、调用hard commit,2、softCommit,但是索引发生了变化(即添加了doc,但是没有提交的时候)
其实当创建一个新的IndexSearcher的时候不仅仅有warm,还有其他的操作可以配置,下一个博客中介绍。
相关推荐
- **6.3 Cache auto Warm Count Considerations**:自动预热缓存的数量设置。 - **6.4 Cache hit rate(缓存命中率)**:提高缓存命中率的方法。 - **6.5 Explicit Warming of Sort Fields**:显式预热排序字段的...
2.还不够自动(不适合当前新的Index Warmup API)。 三、压力测试评比 1.特性对比 建立索引和查询效率:Solr 5.x和ElasticSearch 2.x的建立索引速度相似,但Solr建立索引时查询效率下降,而ElasticSearch边建立...
2. 还不够自动(不适合当前新的 Index Warmup API)。 ElasticSearch 与 Solr 的比较 在实际应用中,ElasticSearch 和 Solr 都有其优缺点。以下是一些关键的比较: 1. 当单纯的对已有数据进行搜索时,Solr 更快。...
- **6.3 Cache auto Warm Count Considerations**:缓存自动预热的设置。 - **6.4 Cache hit rate(缓存命中率)**:提高缓存利用率的方法。 - **6.5 Explicit Warming of Sort Fields**:对排序字段进行显式预热。 ...
【清华大学】DeepSeek从入门到精通(视频课程+PDF)
自2019年以来,教育部启动实施“双高计划”,遴选确定首批“双高计划”建设单位197所,其中高水平学校建设单位56所,高水平专业群建设单位141所,河南省有黄河水利职业技术学院、河南工业职业技术学院等6所职业学校入选。2022年,教育部开展国家“双高计划”中期绩效评价,从评价结果看,国家“双高计划”任务进展顺利,建设成效突出,形成了一批先进经验做法和典型案例,在引领职业教育改革、服务国家战略和支撑区域发展方面形成示范势头。 今天,我们给大家分享一些“双高计划”专业群完整申报书与建设方案和中期评估报告。 ## 一、专业群完整申报书与建设方案 ## 二、“双高计划”中期报告 (100多份)
内容概要:本文详细探讨了电商平台上秒杀系统中减库存的设计逻辑和技术优化方法。首先,文中阐述了‘下单减库存’、‘付款减库存’和‘预扣库存’三种常见方式及其各自面临的问题和局限性,尤其是面对高并发流量冲击下的系统稳定性与数据准确性保障挑战。接着讨论了适用于大规模促销活动中快速而精准地扣除存货的方法,提出了诸如应用本地缓存(Local Cache)、引入高性能持久化键值存储(如Redis),甚至修改数据库引擎源代码(InnoDB 层面排队机制)等一系列先进解决方案来确保交易流程顺畅。此外,还提到了在极端情况发生(例如超卖)时如何借助补救措施挽回损失的具体实例。 适合人群:电商平台开发运维技术人员;有兴趣深入了解电商业务架构和技术优化的开发者和IT管理人员。 使用场景及目标:①帮助设计师理解不同减库存策略的应用时机及其利弊;②指导程序员针对特定业务需求选择最适合的技术路径进行项目构建;③提供给运维专家关于改善在线交易平台响应速度和服务质量的专业见解。 其他说明:本篇文章对于构建高效的电子商贸系统有着极高的参考价值,尤其是那些准备应对瞬息万变市场环境下的企业来说尤为重要。它不仅限于理论探讨层面,
动态表单,VUE动态表单。基于vue+elementplus实现动态表单组件,通过拖拽组件到面板即可实现一个表单。支持各个组件的动态隐藏显示,动态表格弹窗式维护。
【毕业设计】java-springboot-vue家居日用小百货交易网站实现源码(完整前后端+mysql+说明文档+LunW).zip
【毕业设计】java-springboot+vue火锅店管理系统源码(完整前后端+mysql+说明文档+LunW).zip
随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了微服务在线教育系统的开发全过程。通过分析微服务在线教育系统管理的不足,创建了一个计算机管理微服务在线教育系统的方案。文章介绍了微服务在线教育系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本微服务在线教育系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,课程信息管理,课程类型管理,学科管理,购买的课程管理,职业规划管理,视频点播管理,我的笔记管理,我的课程管理,消息通知管理,学习交流,试卷管理,留言板管理,试题管理,系统管理,考试管理。用户功能有个人中心,用户管理,购买的课程管理,我的笔记管理,我的课程管理,消息通知管理。因而具有一定的实用性。 本站是一个B/S模式系统,采用SSM框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得微服务在线教育系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高微服务在线教育系统管理效率。 关键词:微服务在线教育系统;SSM框架;MYSQL数据库;Spring Boot
javascript 基于Javascript实现,强化学习QLearning的一个贪吃蛇实例.
python教程学习
我国科学技术的不断发展,计算机的应用日渐成熟,其强大的功能给人们留下深刻的印象,它已经应用到了人类社会的各个层次的领域,发挥着重要的不可替换的作用。信息管理作为计算机应用的一部分,使用计算机进行管理,具有非常明显的优点,利用网络的优势特开发了本基于Spring Boot的IT技术交流和分享平台。 本IT技术交流和分享平台是基于Spring Boot框架,采用Java技术,MYSQL数据库进行开发的。系统具有灵活的一体化设计方式,圆满完成了整个系统的界面设计。本系统实现了用户功能模块和管理员功能模块两大部分,通过该系统用户可以快速进行IT技术交流和分享,管理员可登录系统后台对系统进行全面管理,确保系统正常稳定的运行。系统功能齐全,符合用户IT技术交流和分享的需求。 本文主要首先介绍了课题背景、设计原则和研究内容,系统采用的相关技术及开发平台,接着对本基于Spring Boot的IT技术交流和分享平台进行系统需求分析和设计,包括系统的功能模块,数据库的设计,系统结构以及系统界面设计等,最后对进行系统测试,完成本篇论文。 关键词:IT技术交流, Spring Boot框架, Java技术,MYSQL数据库
疲劳检测yawn图片数据集
JDK7通过java-jwt验证
【毕业设计】java-springboot+vue会议管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
python学习资源
51CTO 1、技术解析篇-DeepSeek入门宝典 2、开发实战篇-DeepSeek入门宝典 3、行业应用篇-DeepSeek入门宝典 4、个人使用篇-DeepSeek入门宝典
内容概要:本文档是由高正奇编辑的针对模式识别和机器学习(PRML)教科书的一份详细的解答手册。文档覆盖了从基本概念如误差函数求导、贝叶斯定理应用到多元高斯分布计算、Gamma函数积分及其性质等一系列复杂问题的解决方案,以及涉及线性模型分类的基础练习题、条件概率和联合概率计算等入门级习题。每一题都经过细致推导,帮助学生加深对机器学习相关概念的理解并掌握具体的数学方法。 适合人群:主要适用于正在攻读机器学习、模式识别相关课程的学生,以及从事数据科学工作的专业人士作为深入理解和实践指南。 使用场景及目标:本手册旨在辅助教学过程中遇到的具体难题解析,在研究和实践中作为参考资料进行理论验证和技术难点突破,尤其有助于准备考试或者项目实施时需要巩固知识的应用场合。 其他说明:书中题目涵盖广泛,既有直观的概率论应用,也有复杂的积分变换技巧和最优化思路展示,对于希望提高自身计算能力和解决实际问题能力的学习者非常有价值。但要注意的是,部分内容较为深奥,可能不适合初学者自学使用,最好配合课堂讲解或其他教材一起学习效果更佳。