Lucene 4 和 Solr 4 学习笔记(2) .
分类:搜索2011-06-1123:31449人阅读评论(0)收藏举报
现在先让我们把Lucene和Solr的开发环境搭建起来,建立简单的索引,并了解怎么参与Solr的使用和开发(提交一个bug或者尝试新的patch都可以算对solr的contribution)。
首先讲一下我的配置方法,然后翻译一下solr的wiki文章“HowtoContributetoSolr”。
第一步是获取源代码。
一种方法是从svn取出最新的源代码:svncheckouthttp://svn.apache.org/repos/asf/lucene/dev/trunklucene_trunk
不过这种方法需要一个一个文件的下载,缺点是比较慢,而且偶尔也会碰到最新的代码有些部分是不能编译的,优点是更新方便,增量的更新。
另一种方法就是下载NightlyBuild的版本,这种方法的优点是下载快(打成了tar包),肯定能编译,缺点是更新麻烦。鉴于自己的网速,以及主要目的是学习源代码,所以也不用那么频繁的更新,所以我是直接下载NightlyBuild,solr的NightlyBuild地址是http://wiki.apache.org/solr/NightlyBuilds,注意,lucene也有NightlyBuild版本的地址https://builds.apache.org//job/Lucene-trunk/lastSuccessfulBuild/artifact/artifacts/。因为我们的目的是同时学习Solr和lucene,所以只需要下载Solr的就行了,因为Solr的NightlyBuild就保护了Lucene的源代码,注意要下载src.tgz,这个是源代码,其余的那些是编译后的jar包。我下载的是apache-solr-4.0-2011-06-08_08-38-54.src.tgz,也就是六月八日Build的版本,你可能下载的就是最近的一个版本了,当然以后的版本可能会有一些变化,但是我相信Lucene/Solr4大致的架构还是不会大变的。
第二步就是让它能在IDE里运行调试。
当然也可以不用IDE,直接用你喜欢的文本编辑器查看修改源代码,用Ant编译测试打包。但是我的习惯是在IDE里工作,跟踪代码的流程,调试会更方便一些。下面我讲讲在Eclipse里是怎么搭建一个环境的。(我的方法可能比较土,希望熟悉Eclipse的朋友提出更好的方法)
1.用Eclipse(我的版本是eclipsejeegalileo,我想你的Eclipse应该是能用tomcat的javaee的版本吧)创建一个DynamicWebProject,随便起个名字,比如我的叫做“Lucene-Solr-NightlyBuild”,其余的一路Next使用默认的配置就行了。
2.把下载后的tar包解压到这个工程的根目录下。(当然也可以任意地方,放到工程下比较方便)
3.Eclipse-->选中工程,右键-->属性(properties)-->javabuildpath-->选中SourceTab,然后AddFolder一个一个把你感兴趣的包加入进来。注意选择文件夹的方法:比如这个包是lucene/contrib/demo/,我怎么选择呢?我应该勾选包名的上层,比如它的包应该是org.apache.xxx.xxx,那么我应该选择它的父目录src,参考下图。
一般选择核心的包和自己感兴趣的就可以了,我这里选择了几乎所有的包。后面我会介绍一下Lucene和Solr的代码的结构。另外我会把我的Eclipse的.classpath文件和.project文件放上来,你下载后修改一下应该就可以用了。比如我的.classpath文件里为:
<classpathentrykind="src"path="apache-solr-4.0-2011-06-08_08-38-54/lucene/src/java"/>
那么你可能要修改成你下载的tar包解压后的名称了。使用趁手的文本编辑器一次替换apache-solr-4.0-2011-06-08_08-38-54应该就可以了。
4.搜索apache-solr-4.0-2011-06-08_08-38-54下的所有jar包,复制到WebContent/WEB-INF/lib/下,其中WebContent是Eclipse默认的Web目录。你如果做了修改,应该把这些jar包复制到相应的地方。
5.这个时候Eclipse应该能够成功的编译所有的java文件,如下图所示,可能会有一些html或者xml文件会提示错误,但是确认所有的java文件编译没问题。
6.复制Lucene-Solr-NightlyBuild/apache-solr-4.0-2011-06-08_08-38-54/solr/src/webapp/web下的所有文件和目录到Lucene-Solr-NightlyBuild/WebContent下面,可能会提示有些文件存在了,覆盖掉原来的。
7.在PackageExplorer里右键点击工程,选择Debug-->DebugOnServer,选择用ApacheTomcat6作为Web服务器(在Eclipse里配置Tomcat6不会的话可以搜索一下),这时服务器应该起不来,因为复制过去的web.xml里有一下Solr的配置,比如SolrDispatchFilter的配置,所以需要修改一下。还是右键点击工程,选择Debug-->DebugConfiguration-->选择ArgumentsTab,在下面的VMarguemnts加入如下两行:
-Xmx1g
-Dsolr.solr.home="D:/Lucene-Solr-NightlyBuild/apache-solr-4.0-2011-06-08_08-38-54/solr/example/solr"
第一行是让tomcat的内存能大一点,省得以后碰到OOM异常。
第二行是告诉solr我们使用的solr的家目录在哪里。现在我们使用solr的example下的就可以了,以后我们使用时可以创建自己的配置(当然最好也是修改原来的配置文件,自己从零开始也麻烦并且容易出错)。
8.再次Debug工程,这次应该可以起来tomcat了。另外启动可能时间会有点长,可能会超过tomcat默认的45秒启动时间,所以如果碰到启动超时,那么去修改一下,可以在IDE里修改,也可以直接修改配置文件。
9.访问http://localhost:8080/Lucene-Solr-NightlyBuild/,应该可以看到solr的管理页面,在这里可以管理solr的各种信息,也可以写一些query来查询文档。不过现在还没有建立索引(准确的说索引里没有任何文档),所以搜索不出什么东西了。
10.用shell或者cmd进入Lucene-Solr-NightlyBuild/apache-solr-4.0-2011-06-08_08-38-54/solr/example/exampledocs目录,然后执行如下java命令:
java-Durl=http://localhost:8080/Lucene-Solr-NightlyBuild/update-jarpost.jaripod_video.xml
正常的情况我们应该可以看到如下的输出:
SimplePostTool:version1.3
SimplePostTool:POSTingfilestohttp://localhost:8080/Lucene-Solr-NightlyBuild/
update..
SimplePostTool:POSTingfileipod_video.xml
SimplePostTool:COMMITtingSolrindexchanges..
你也可以把那个目录里其它的一下xml文件也通过上面的方法加入到索引里。
11.如果一切正常,那么我们就可以在http://localhost:8080/Lucene-Solr-NightlyBuild/#/singlecore/query搜索了,
比如我们刚才索引的xml文件里有个name字段(Field),里面包含iPod,那么我们可以q的文本框里输入name:ipod,点击下面的ExecuteQuery,我们应该可以看到搜索结果。另外这个新的接口对Chrome之外的浏览器可能js的兼容性不是太好,可以访问老版的接口http://localhost:8080/Lucene-Solr-NightlyBuild/admin/(呵呵,这个是不是更熟悉一些),里面也有各种管理和查询功能。
12.调试,用Ctrl+Shift+R/T找到SolrDispatchFilter,你也可以自己在左边的PackageExplorer里找到它,这样可以熟悉Lucene和Solr的代码结构。然后在140行方法publicvoiddoFilter里加入一个断点。然后执行一个查询,这时应该会到断点,这就说明我们可以调试代码,跟踪阅读代码啦!SolrDispatchFilter是Solr非常重要的一个类,具体代码会在后面进行分析,我们现在只要知道所有的admin页面的请求都会到这里来就行了,如果你想自己探索一下,可以配合web.xml读读它的代码。
13.下载lucene/solr社区的Codestyle文件(比较诡异的是他们的tab键定义为2个空格,搞得我很不适应),然后导入这个工程,这样我们的编码风格和lucene/solr的开发者一致,以便我们以后方便contribute自己的代码。呵呵,别嫌麻烦,也许你以后就是lucene/solr的contributor了呢。具体方法是右键点击工程-->属性-->codestyle,然后import,参考下图:
-------------------------------------------------------------------------------------------
至此恭喜你已经成功的搭建了环境!
关于在IDE里搭建环境在lucene的mailing-list里也有很多讨论,可以如果你是其它IDE或者碰到什么问题,可以先搜索一下,另外lucid(这个网站值得常去看看)里的这篇文章(http://www.lucidimagination.com/developers/articles/setting-up-apache-solr-in-eclipse)介绍怎么在Eclipse里搭建环境的,不过他没有使用tomcat,而是使用了jetty作为web容器,此为solr自带的例子也是使用jetty。
下面我介绍一下Lucene和Solr的代码结构。