分享

solr 从零学习开始(2)--开发必备:认识solr源码结构

nettman 2014-2-28 23:11:49 发表于 连载型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 17620
本帖最后由 nettman 于 2014-2-28 23:35 编辑

上一篇:solr 从零学习开始(1)--整体了解solr



阅读本文可以带着下面问题:

1.Solr有几个目录
2.build是在什么过程中生成的?
3.那个目录包含了特定语言的Solr客户端API,使得使用其他语言的用户能通过HTTP用XML与Solr进行通话。
4.那个目录包含war和jar文件,以及相关的依赖文件。

5.Jetty的安装目录是指哪个目录
6.Jetty的配置在目录?
7.Solr项目的整个源代码在哪个文件?
8.Solr home的作用是什么?
9.example/solr包含什么文件?
10.conf/schema.xml文件的作用是什么?
11.conf/solrconfig.xml文件的作用是什么?
12.conf/xslt文件的作用是什么?
13.Solr是如何找到运行所需要的home目录的呢



1.目录结构说明

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


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


2)       client:该目录包含了特定语言的Solr客户端API,使得使用其他语言的用户能通过HTTP用XML与Solr进行通话。现在该目录里面虽然包含javascript、python、ruby三个子目录,但是到目前为止只包含一部分的ruby的代码,其他语言仍是空的。另外,Solr的Java客户端称为SolrJ,其代码位于src/solrj目录下面。在之后的文章中我会详细介绍Solr客户端的使用。


3)       dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。还记得上一篇文章中,我们在build 1.4版本的Solr源代码后需要部署example吗?其实就是将该目录下面的apache-solr-1.4.war部署到Jetty上面去,并重命名为solr.war。


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文件就部署在这里。


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


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


7)  src:该目录包含了Solr项目的整个源代码。这里对其各个子目录也做相应的介绍。



  • src/java:该目录存放的是Solr使用Java编写的源代码。


  • src/scripts:该目录存放的是配置Solr服务器的Unix BashShell脚本,在后面介绍多服务器配置中将会有重要的作用。


  • src/solrj:前面提到过该目录存放的是Solr的Java版本的客户端代码。


  • src/test:该目录存放的是测试程序的源代码和测试文件。


  • src/webapp:该目录存放的是管理Solr的Web页面,包括Servlet和JSP文件,其构成了前面提到的WAR文件。管理Solr的JSP页面在web/admin目录


下面,如果你有兴趣折腾Solr可以找到相应的JSP的页面对其进行设置


2.     Solr home说明

所谓的Solr home目录实际上是一个运行的Solr实例所对应的配置和数据(Lucene索引)。在Solr的example/solr目录就是一个Solr用做示例的默认配置home目录。实际上example/multicore也是一个合法的Solr home目录,只不过是用来做mult-core设置的。那么我们来看看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文件中放到这里。


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添加以下一段代码:

  1. <env-entry>
  2. <env-entry-name>solr/home</env-entry-name>
  3. <env-entry-value>solr/</env-entry-value>
  4. <env-entry-type>java.lang.String</env-entry-type>
  5. </env-entry>
复制代码
实际上这段XML在web.xml文件中已经存在,你只需要把原来注释掉的xml取消注释,添加你所要指向的home目录即可。因为修改了web.xml文件,所以你需要运行antdist-war来重新打包之后再部署WAR文件。
最后,如果Solr的home目录既没有通过Java系统属性指定也没有通过JNDI指定,那么他将默认指向solr/。
在产品环境中,我们必须设置Solr的home目录而不是让其默认指向solr/。而且应该使用绝对路径,而不是相对路径,因为你有可能从不同的目录下面启动应用服务器。

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








加微信w3aboutyun,可拉入技术爱好者群

已有(1)人评论

跳转到指定楼层
1691335036 发表于 2016-11-9 19:52:03
文章说的挺深入的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条