最近一直在研究Solr的相关源代码,今天开始记录!
1.SolrCore启动
首先我们看solrcore的核心构造方法,如下:
public SolrCore(String name, String dataDir, SolrConfig config, IndexSchema schema, CoreDescriptor cd, UpdateHandler updateHandler, IndexDeletionPolicyWrapper delPolicy, SolrCore prev)
整个solrcore的初始化有这个构造方法完成,主要做了如下几件事情:
1):initDirectoryFactory()通过solrconfig.xml文件中<directoryFactory/>配置初始化directory工厂,如果没有配置默认则采用NRTCachingDirectoryFactory
2)获取solr索引根目录,配置在solrConfig.xml文件中
3) initListeners();初始化后监听器newSearcher。firstSearcher
4)initIndex():初始化Directory(NRTCachingDirectory)和indexfactory,其中对directory进行缓存
5)initWriters(),initQParsers();initValueSourceParsers(); initTransformerFactories();后续介绍
6)通过solrConfig文件初始化相关RequestHandler
7)getSearcher(false, false, null, true)初始化searcher(下面重点分析这个方法)
在solrcore的构造方法中有如下一段代码
// cause the executor to stall so firstSearcher events won't fire // until after inform() has been called for all components. // searchExecutor must be single-threaded for this to work searcherExecutor.submit(new Callable<Void>() { public Void call() throws Exception { latch.await(); return null; } });
这个有一段注解,大概意识是说:阻塞线程池,直到所有的组件都初始化完成前不执行firstSearcher这个事件,为什么要这样做了,和我们接下来要分析的getSearcher(false, false, null, true)这个方法有莫大的关系。
方法定义如下:
public RefCounted<SolrIndexSearcher> getSearcher(boolean forceNew, boolean returnSearcher, final Future[] waitSearcher, boolean updateHandlerReopens) forceNew:true表示强制创建searcher returnSearcher:true表示返回创建的searcher本质就是searcher引用加1
我们具体代码来分析,首先
if (_searcher!=null && !forceNew) { if (returnSearcher) { _searcher.incref(); return _searcher; } else { return null; } }在solrcore初始化的时候_searcher=null,根据上面提到的参数做相关的处理;
相关推荐
lucene&solr原理分析,lucene搜索引擎和solr搜索服务器原理分析。
关于Solr技术分析及运用的开发文档,从下载到运行的全过程。
solr技术分析及运用超详细教程solr开发指南,包括solr服务器搭建,新增数据库配置,配置增量更新,配置分词器,常见异常,删除默认字段,调试技巧,solr日志,,solr基本查询语法,solr多字段匹配,solri集成solr...
solr讲解,案例分析
Apache Solr 架构分析内部设计篇PDF Solr 源码 架构 分析 设计
【图解版】solr原理分析,从全文检索到solr原理分析,并对出现的问题进行分析解答,不可用于商业用途,如有版权问题,请联系删除!
4. 各种中文分析器 章节二:Solr基础(下) 1. Solr基础知识 2. Solr查询 3. Facet查询 4. Group查询 5. 高亮查询 6. Suggest查询 7. SolrJ 章节三:Solr高级(上) 1. Solr Cloud 2. 函数查询 3. 地理位置查询 4. ...
他的主要特性包括:高效,灵活的缓存功能,垂直搜索功能,高亮下试搜索结果,通过索引复制来提高可用性,提供一套强大的data schema 来定义字段,类型和设置文本分析,提供基于web的管理界面等。
3. solr是什么 2 3.1 solr的功能 3 3.2 solr术语 3 3.2.1 Auto-warming 3 3.2.2 Facet 3 3.3.3 Document 6 3.3.4 Field 6 3.3.5 IndexWriter 6 3.3.6 IndexSearcher 6 3.3.7 Directory 6 3.3.8 Segment 7 3.3.9 ...
通过在查询时传递查询分析器,严格控制solr查询解析和执行的方式。请在这篇博文中阅读更多内容。
3.6.4 Solr分词器、过滤器、分析器 42 3.6.5 Solr高亮使用 46 4 SolrJ的用法 46 4.1 搜索接口的调用实例 46 4.2 Solrj的使用说明 47 4.2.1 Adding Data to Solr 47 4.2.2 Directly adding POJOs to Solr 49 4.2.3 ...
详细阐述Solr-search 源码级别过程
不仅讲解了基本概念和使用方法,而且还分析了各组件的内部工作机制。 下卷(第11~16章) 细致、深入地讲解了Solr的高级知识和拓展知识。 高级知识部分包括:Solr的高级查询及其各种查询技巧,如函数查询、地理空间...
Apache Solr 搜索架构分析外部设计篇PDF Solr 源码 架构 分析 搜索
定制 Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一 个描述所有 Field 及其内容的 XML 文档就可以了。定制搜索的时候只需要发送 HTTP GET 请求 即可,然后对 Solr 返回的信息进行重新布局,以产生利于...
不仅讲解了基本概念和使用方法,而且还分析了各组件的内部工作机制。 下卷(第11~16章) 细致、深入地讲解了Solr的高级知识和拓展知识。 高级知识部分包括:Solr的高级查询及其各种查询技巧,如函数查询、地理空间...
Explain.solr.pl 是一个 Solr 的可视化工具,用来帮助你分析为什么一个文档会出现在搜索结果列表中。 支持 Solr: 3.0 3.1 3.2 3.3 3.4 3.5 标签:Explain
Solr和ElasticSearch分析比较