本文是Apache Solr介绍的姊妹篇,我将逐一分析Apache Solr的各个包,力图详细地分析Solr的设计和架构。Apache Solr由12个包组成,如下:
- org.apache.solr.analysis
- org.apache.solr.core
- org.apache.solr.request
- org.apache.solr.schema
- org.apache.solr.search
- org.apache.solr.search.function
- org.apache.solr.servlet
- org.apache.solr.tst
- org.apache.solr.update
- org.apache.solr.util
- org.apache.solr.util.test
- org.apache.solr.util.xlst
Apache Solr尚处于发展期,目前版本才是1.1.0。文档的注释非常少。我们先从使用者的角度出发,最先看到的当然是servlet,因为Solr本身是个独立的网络应用程序,需要在Servlet容器中运行来提供服务,所以servlet是用户接触的最外层。
我们看看org.apache.solr.servlet包。这个包很简单,只有两个类:SolrServlet和SolrUpdateServlet.我们很容易从类名中猜出这两个类的用途。
SolrServlet类继承HttpServlet类,只有四个方法:
- init()
- destroy()
- doGet()
- doPost()
SolrServlet类中除了普通的Java类对象(包括Servlet相关的)外,有四个Solr本身的类,还有一个Solr本身的异常。其中两个类和一个异常属于org.apache.solr.core包,两个类属于org.apache.solr.request包。属于core包的有:
- Config:
- SolrCore:
属于request包的有:
- SolrQueryResponse:
- QueryResponseWriter:
分析一下这个SolrServlet类。
首先servlet会调用init()方法进行初始化:通过Context查找java:comp/env/solr/home来确定Solr的主目录(home),接着调用Config.setInstanceDir(home)方法设置这个实例的目录。然后通过SolrCore.getSolrCore()来获得一个SolrCore实例。
destroy()方法将会在Servlet对象销毁时调用,仅仅调用core.close()关闭SolrCore实例。
当用户请求进来时doPost()简单地将任务交给doGet()完成,主要的任务由doGet()完成。
分析一下doGet()方法:
- 使用SolrCore和doGet()参数request生成一个SolrServletRequest对象(注意:这个SolrServletRequest类不是公开类,位于org.apache.solr.servlet包中,继承了SolrQueryRequestBase类,仅仅接受SolrCore和HttpServletRequest对象作为参数)
- 然后SolrCore执行execute()方法(参数为SolrServletRequest和SolrQueryResponse)
由此可见,真正的处理核心是SolrCore的execute方法。下一篇文章我们继续分析。
分享到:
相关推荐
Apache Solr 架构分析内部设计篇PDF Solr 源码 架构 分析 设计
Apache Solr 搜索架构分析外部设计篇PDF Solr 源码 架构 分析 搜索
apache官方的solr4.0的源代码包,可以通过分析源代码提高理解,或者通过编译源码进行二次开发
可选的TextMatchAspect将提取具有匹配文本的所有日志,并且您可以根据需要指定任意数量的日志,例如: java -jar slr.jar / solr / logs org.apache.solr.cloud -o / results 注意: TextMatchAspect仅在使用-o指定...
Apache Solr 是一个开源的搜索服务器,Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。定制 Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一 个描述所有 Field 及其内容的 XML 文档就...
适用于Apache Lucene / Solr的土耳其语分析组件 在土耳其,开源软件的使用正日益增长。 Apache Lucene / Solr(和其他 )邮件列表上的土耳其用户正在增加。 该项目利用公共可用的土耳其语NLP工具从中创建。 我创建...
用于描述apache开源的搜索引擎solor的源代码分析,详细描述了solor的配置、开发以及应用方法
每个文档由一系列的Field构成,每个Field表示资源的一个属性Solr中的每个Document需要有能唯一标识其自身的属性,默认情况下这个属性的名字是id,在Schema配置文件中使用:id进行描述。 Solr是一个高性能,采用Java...
并将其包含在分析器库中,以便DSpace和其他使用用于搜索的Apache Solr可以为字段类型指定除英语和其他语言之外的毛利词干快速入门(Lucene库) 要在Apache Solr 4.10.4(例如DSpace 6)中测试此词干分析器,请执行...
Solr文本标注器该项目使用Lucene FST(有限状态换能器)技术实现了基于Apache Lucene / Solr的“幼稚”文本标记器,该技术具有明显的低内存特性。 它之所以“天真”,是因为它在不考虑任何自然语言上下文的情况下...
zabbix,solr等平台一些漏洞的实现Nagios core(CVE-2016-9565)Apache Solr XXE(CVE-2017-12629)Apache Solr RCE(CVE-2017-12629)Zabbix RCE (CVE-2017-2824)Zabbix 2.0 SQL Injection漏洞的搭建、分析与...
介绍 LEAN是一组Java工具,用于从文本文档中生成词频矩阵。 LEAN工具旨在与GTRI / GA Tech SmallK软件发行版兼容,该软件发行版... 可伸缩性:Lucene是用于为Apache Solr提供支持的搜索引擎,Apache Solr是一个高度可靠
Lucene是apache软件基金会4jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎...
图片来自Pexels 最近项目组安排了一个...但是先不考虑本身设计的合理性,领导需要开发,所以我开始踏上了搭建 ES 服务的道路,从零开始,因为之前完全没接触过 ES,所以通过本系列来记录下自己的开发过程。 什么是全
Elasticsearch是一个分布式、Restful的搜索及分析服务器,Apache Solr一样,它也是基于Lucence的索引服务器,但我认为Elasticsearch对比Solr的优点在于: 轻量级:安装启动方便,下载文件之后一条命令就可以启动; ...
Sparkler(Spark-Crawler的缩写)是一种新的Web爬网程序,它利用了分布式计算的最新进展和信息检索领域,将Spark,Kafka,Lucene / Solr,Tika和pf4j等各种Apache项目整合在一起。 Sparkler是可扩展,高度可扩展的高...
HAWQ Hadoop With Query (是一个Hadoop原生大规模并行SQL分析引擎,针对的是分析性应用) Chukwa Apache Chukwa is an open source data collection system for monitoring large distributed systems. Kudu Kudu ...