`
weishiym
  • 浏览: 34179 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

Solr源码结构

    博客分类:
  • solr
 
阅读更多
1. 目录结构说明

我们下载的Solr包中,进入Solr所在的目录,我们可以看到以下几个目录:build、client、dist、example、lib、site、src。下面分别对其进行介绍。

1.1. build
该目录是在ant build过程中生成的,其中包含了未被打包成jar或是war的class文件以及一些文档文件。

1..2. client
该目录包含了特定语言的Solr客户端API,使得使用其他语言的用户能通过HTTP用XML与Solr进行通话。现在该目录里面虽然包含JavaScript、Python、ruby三个子目录,但是到目前为止只包含一部分的ruby的代码,其他语言仍是空的。另外,Solr的Java客户端称为SolrJ,其代码位于src/solrj目录下面。

1.3. dist
该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。需要部署时,其实就是将该目录下面的apache-solr-1.4.war部署到Jetty上面去,并重命名为solr.war。

1.4. example
这个目录实际上是Jetty的安装目录。其中包含了一些样例数据和一些Solr的配置。
其中一些子目录也比较重要,这里也对它们稍作介绍。
  example/etc:该目录包含了Jetty的配置,在这里我们可以将Jetty的默认端口从8983改为80端口。
  将其中的8983端口换成80端口。注意更改端口后启动Jetty可能会提示你没有权限,你需要使用sudo java -jar start.jar来运行。
  example/multicore:该目录包含了在Solr的multicore中设置的多个home目录。在之后的文章中我会对其进行介绍。
  example/solr:该目录是一个包含了默认配置信息的Solr的home目录。
详见下面的“solr home说明”
 example/webapps:Jetty的webapps目录,该目录通常用来放置Java的Web应用程序。在Solr中,前面提到的solr.war文件就部署在这里。

1.5. lib
该目录包含了所有Solr的API所依赖的库文件。其中包括Lucene,Apache commons utilities和用来处理XML的Stax库。

1.6. site
该目录仅仅包含了Solr的官网的网页内容,以及一些教程的PDF文档。

1.7. src
该目录包含了Solr项目的整个源代码。这里对其各个子目录也做相应的介绍。
 src/java:该目录存放的是Solr使用Java编写的源代码。
 src/scripts:该目录存放的是配置Solr服务器的Unix Bash Shell脚本,在后面介绍多服务器配置中将会有重要的作用。
 src/solrj:前面提到过该目录存放的是Solr的Java版本的客户端代码。
 src/test:该目录存放的是测试程序的源代码和测试文件。
 src/webapp:该目录存放的是管理Solr的Web页面,包括Servlet和JSP文件,其构成了前面提到的WAR文件。管理Solr的JSP页面在web/admin目录下面,如果你有兴趣折腾Solr可以找到相应的JSP的页面对其进行设置

2. Solr home说明
2.1. 什么是Solr home
所谓的Solr home目录实际上是一个运行的Solr实例所对应的配置和数据(Lucene索引)。
在Solr的example/solr目录就是一个Solr用做示例的默认配置home目录。
实际上example/multicore也是一个合法的Solr home目录,只不过是用来做mult-core设置的。

2.2. Solr home中都有什么?

我们来看看example/solr这个目录里面都有些什么。
example/solr目录下主要有以下一些目录和文件:
1) bin:如果你需要对Solr进行更高级的配置,该目录建议用来存放Solr的复制脚本。
2) conf :该目录下面包含了各种配置文件,下面列出了两个最为重要的配置文件。其余的.txt和.xml文件被这两个文件所引用,如用来对文本进行特殊的处理。
 conf/schema.xml:该文件是索引的schema,包含了域类型的定义以及相关联的analyzer链。
 conf/solrconfig.xml:该文件是Solr的主配置文件。
 conf/xslt:该目录包含了各种XSLT文件,能将Solr的查询响应转换成不同的格式,如:Atom/RSS等。
3) data:包含了Lucene的二进制索引文件。
4) lib:该目录是可选的。用来放置附加的Java JAR文件,Solr在启动时会自动加载该目录下的JAR文件。这就使得用户可以对Solr的发布版本(solr.war)进行扩展。如果你的扩展并不对Solr本身进行修改,那么就可以将你的修改部署到JAR文件中放到这里。

2.3. Solr是如何找到运行所需要的home目录的呢?

Solr首先检查名为solr.solr.home的Java系统属性,有几种不同的方式来设置该Java系统属性。
一种不管你使用什么样的Java应用服务器或Servlet引擎都通用的方法是在调用Java的命令行中进行设置。
所以,你可以在启动Jetty的时候显式地指定Solr的home目录java -Dsolr.solr.home=solr/ -jar start.jar。
另一种通用的方法是使用JNDI,将home目录绑定到java:comp/env/solr/home。
并向src/webapp/web/WEB-INF/web.xml添加以下一段代码:
<env-entry>
   <env-entry-name>solr/home</env-entry-name>
   <env-entry-value>solr/</env-entry-value>
   <env-entry-type>java.lang.String</env-entry-type>
</env-entry>
实际上这段XML在web.xml文件中已经存在,你只需要把原来注释掉的xml取消注释,添加你所要指向的home目录即可。
因为修改了web.xml文件,所以你需要运行ant dist-war来重新打包之后再部署WAR文件。
最后,如果Solr的home目录既没有通过Java系统属性指定也没有通过JNDI指定,那么他将默认指向solr/。
在产品环境中,我们必须设置Solr的home目录而不是让其默认指向solr/。
而且应该使用绝对路径,而不是相对路径,因为你有可能从不同的目录下面启动应用服务器。

2.4. Jetty是什么
注:Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。
Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。
开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。


3. Solr的包说明
3.1. Solr的12个包

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

3.2. Solr的servlet包

我们先从使用者的角度出发,最先看到的当然是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:

3.3. 分析SolrServlet类

3.3.1. 首先servlet会调用init()方法进行初始化

  通过Context查找java:comp/env/solr/home来确定Solr的主目录(home),接着调用Config.setInstanceDir(home)方法设置这个实例的目录。然后通过SolrCore.getSolrCore()来获得一个SolrCore实例。destroy()方法将会在Servlet对象销毁时调用,仅仅调用core.close()关闭SolrCore实例。

  当用户请求进来时doPost()简单地将任务交给doGet()完成,主要的任务由doGet()完成。

3.3.2. 分析doGet()方法

1) 使用SolrCore和doGet()参数request生成一个SolrServletRequest对象(注意:这个SolrServletRequest类不是公开类,位于org.apache.solr.servlet包中,继承了SolrQueryRequestBase类,仅仅接受SolrCore和HttpServletRequest对象作为参数)

2) 然后SolrCore执行execute()方法(参数为SolrServletRequest和SolrQueryResponse)
由此可见,真正的处理核心是SolrCore的execute方法
分享到:
评论

相关推荐

    solr6.6.0源码

    `schema.xml`则定义了字段类型、字段及其特性,是Solr理解文档结构的关键。 三、Solr核心概念 1. **文档(Documents)**:Solr的基本处理单元,由一系列字段和它们的值组成。 2. **查询(Queries)**:用户输入的...

    solr(solr-9.0.0-src.tgz)源码

    3. **源码结构** 解压后的源码包`solr-9.0.0`包含了以下几个关键部分: - `server`: 存放Solr服务器端代码,如SolrJetty容器、管理API等。 - `contrib`: 第三方贡献的模块,如数据导入工具等。 - `dist`: 发布的...

    solr 4.10源码

    3. **源码结构** 解压后的源码包包含以下主要部分: - `server`:Solr服务器端的代码,包括核心服务、Jetty服务器、配置文件等。 - `example`:预配置的Solr实例,包含示例数据和配置。 - `dist`:发布包和相关...

    Solr项目源码及solr资源包

    Solr项目源码及solr资源包是一个针对搜索引擎平台Apache Solr的学习与实践资源集合,主要结合了Spring Data Solr框架进行操作。这个项目旨在帮助开发者更好地理解和运用Solr进行数据索引和检索。让我们详细地探讨...

    solr-4.5源码包

    在这个源码包中,我们可以深入理解Solr的工作原理以及其核心组件的实现。 首先,让我们了解Solr的基本架构。Solr基于Lucene库构建,Lucene是一个高性能、全文本检索库。Solr在其之上添加了分布式处理、集群管理、...

    solr5的ik中文分词器源码

    "ik-analyzer-solr5-master"目录下的源码结构一般包含以下几个部分: - `src/main/java`:存放核心Java代码,如分词器的实现、词典管理等。 - `src/main/resources`:存放词典文件和其他资源,如字典、配置文件等...

    bhl_rails_solr-源码.rar

    《深入解析bhl_rails_solr源码》 在当今的Web开发领域,Rails框架以其高效、简洁的设计理念,深受开发者喜爱。同时,Solr作为一款强大的全文搜索引擎,被广泛应用于各类复杂的数据检索场景。当这两者结合时,便诞生...

    solr6--solr-dataimporthandler-scheduler-1.1

    DataImportHandler(DIH)是Solr的一个插件,用于从关系型数据库或其他结构化数据源导入数据。它支持多种数据源,如MySQL、Oracle、CSV文件等,并且可以通过XML配置来定义数据源、查询语句以及如何将查询结果转换为...

    Solr 4.0 源代码实例

    源代码实例是学习Solr内部工作原理和自定义功能的关键资源,尤其对于开发者而言,深入理解源码有助于提升系统的优化和扩展能力。 在Solr 4.0版本中,`solr.xml`是Solr的核心配置文件,它定义了Solr实例的基本设置,...

    solr+tomcat项目

    Solr提供了索引、搜索、排序和过滤等强大的功能,可以处理大量结构化和非结构化的数据。它支持多种数据源,如CSV、XML或JSON,且具有高度可配置性,可以通过修改配置文件来定制搜索行为。 Tomcat作为Solr的运行环境...

    solr4.3源代码一

    Solr的QueryParser将用户输入的查询语句转化为Solr可以理解的结构,然后通过查询优化器生成高效的执行计划。在源代码中,你可以找到关于这些的实现,例如Query类和QueryParser子类。 **分布式搜索** SolrCloud是...

    apache-solr-4.0.0-ALPHA-src.gz官方包

    5. **索引结构**:Solr使用倒排索引来快速响应查询。源代码揭示了如何创建、更新和优化这些索引。 6. **分布式搜索**:SolrCloud是Solr的分布式搜索和处理模式,4.0版本可能已开始支持。源码可以帮助理解ZooKeeper...

    solr ik源码详细解析

    《Solr IK源码深度解析:词典、分词与歧义处理》 中文分词是自然语言处理中的关键步骤,它涉及到对文本的精细化处理,以实现诸如搜索引擎、信息检索等应用。本文将深入探讨IKAnalyzer的源码,剖析其核心的词典处理...

    solr深入浅出

    Solr的源码结构清晰,包括目录结构、Solr Home配置等,便于理解和开发扩展。 在部署和配置上,Solr可以与Tomcat等应用服务器集成。安装过程中需注意版本选择,以及验证安装是否成功。对于中文分词,Solr支持mmseg4j...

    JAVA+Solr分词项目工程实例Java源码

    4. **项目结构** - `javaSrc81.zip`:这个压缩文件很可能包含了Java源代码,可能包含以下几个部分: - `SolrClient`:与Solr服务器交互的Java类,负责创建索引和执行查询。 - `DocumentBuilder`:构建Solr文档...

    solr学习入门教程

    在本文发布时,Solr 1.4是最新版本,其目录结构包括多个子目录,如build、client、dist、example、src等,每个目录都有其特定的作用,如存放编译文件、API客户端程序、构建后的文件、示例数据、源码等。 ##### Solr...

    solr-4.10.3.zip

    "solr-4.10.3"文件夹很可能包含了整个Solr 4.10.3的源码、库文件、配置示例、文档和其他相关资源。通常,一个完整的Solr分发版会包含以下部分: 1. **bin**:包含启动和停止Solr服务器的脚本,以及与Solr交互的...

    solr与java结合的小例子

    3. **solr.rar**:这很可能是Solr的源码或配置文件,包含了Solr服务器的运行环境,可能包括Solr实例、配置文件(如solrconfig.xml和schema.xml)以及可能的示例数据。 4. **SolrWeb.rar**:这可能是一个包含Solr Web...

    solr教材-PDF版

    **1.4 源码结构** - **1.4.1 目录结构说明**:Solr项目的目录结构清晰,主要包括src/main/java下的源代码、src/main/resources下的资源文件等。 - **1.4.2 Solrhome说明**:Solrhome是Solr实例的工作目录,包含了...

Global site tag (gtag.js) - Google Analytics