Lucene 4 和 Solr 4 学习笔记(2) .

引用
from http://blog.csdn.net/fancyerii/article/details/6538801

分类: 搜索 2011-06-11 23:31 449人阅读 评论(0) 收藏 举报
   现在先让我们把Lucene和Solr的开发环境搭建起来,建立简单的索引,并了解怎么参与Solr的使用和开发(提交一个bug或者尝试新的patch都可以算对solr的contribution)。



   首先讲一下我的配置方法,然后翻译一下solr的wiki文章“How to Contribute to Solr”。



   第一步是获取源代码。

         一种方法是从svn取出最新的源代码:  svn checkout http://svn.apache.org/repos/asf/lucene/dev/trunk lucene_trunk

         不过这种方法需要一个一个文件的下载,缺点是比较慢,而且偶尔也会碰到最新的代码有些部分是不能编译的,优点是更新方便,增量的更新。

         另一种方法就是下载Nightly Build的版本,这种方法的优点是下载快(打成了tar包),肯定能编译,缺点是更新麻烦。鉴于自己的网速,以及主要目的是学习源代码,所以也不用那么频繁的更新,所以我是直接下载Nightly Build,solr的Nightly Build地址是http://wiki.apache.org/solr/NightlyBuilds ,注意,lucene也有Nightly Build版本的地址https://builds.apache.org//job/Lucene-trunk/lastSuccessfulBuild/artifact/artifacts/。因为我们的目的是同时学习Solr和lucene,所以只需要下载Solr的就行了,因为Solr的Nightly Build就保护了Lucene的源代码,注意要下载src.tgz,这个是源代码,其余的那些是编译后的jar包。我下载的是apache-solr-4.0-2011-06-08_08-38-54.src.tgz,也就是六月八日Build的版本,你可能下载的就是最近的一个版本了,当然以后的版本可能会有一些变化,但是我相信Lucene/Solr 4 大致的架构还是不会大变的。



    第二步就是让它能在IDE里运行调试。

         当然也可以不用IDE,直接用你喜欢的文本编辑器查看修改源代码,用Ant编译测试打包。但是我的习惯是在IDE里工作,跟踪代码的流程,调试会更方便一些。下面我讲讲在Eclipse里是怎么搭建一个环境的。(我的方法可能比较土,希望熟悉Eclipse的朋友提出更好的方法)

         1. 用Eclipse(我的版本是eclipse jee galileo,我想你的Eclipse应该是能用tomcat的java ee的版本吧)创建一个Dynamic Web Project,随便起个名字,比如我的叫做“Lucene-Solr-NightlyBuild”,其余的一路Next使用默认的配置就行了。

         2. 把下载后的tar包解压到这个工程的根目录下。(当然也可以任意地方,放到工程下比较方便)

         3. Eclipse -->选中工程,右键-->属性(properties)-->java build path -->选中Source Tab,然后Add Folder一个一个把你感兴趣的包加入进来。注意选择文件夹的方法:比如这个包是lucene/contrib/demo/,我怎么选择呢?我应该勾选包名的上层,比如它的包应该是org.apache.xxx.xxx,那么我应该选择它的父目录src,参考下图。

                      

          一般选择核心的包和自己感兴趣的就可以了,我这里选择了几乎所有的包。后面我会介绍一下Lucene和Solr的代码的结构。另外我会把我的Eclipse的.classpath文件和.project文件放上来,你下载后修改一下应该就可以用了。比如我的.classpath文件里为:

         <classpathentry kind="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. 在Package Explorer里右键点击工程,选择Debug-->Debug On Server,选择用Apache Tomcat6作为Web服务器(在Eclipse里配置Tomcat 6不会的话可以搜索一下),这时服务器应该起不来,因为复制过去的web.xml里有一下Solr的配置,比如SolrDispatchFilter的配置,所以需要修改一下。还是右键点击工程,选择Debug-->Debug Configuration-->选择Arguments Tab,在下面的VM arguemnts加入如下两行:

-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 -jar post.jar ipod_video.xml



                 正常的情况我们应该可以看到如下的输出:

SimplePostTool: version 1.3
SimplePostTool: POSTing files to http://localhost:8080/Lucene-Solr-NightlyBuild/
update..
SimplePostTool: POSTing file ipod_video.xml
SimplePostTool: COMMITting Solr index changes..
                 你也可以把那个目录里其它的一下xml文件也通过上面的方法加入到索引里。

               11. 如果一切正常,那么我们就可以在http://localhost:8080/Lucene-Solr-NightlyBuild/#/singlecore/query搜索了,

                     比如我们刚才索引的xml文件里有个name字段(Field),里面包含iPod,那么我们可以q的文本框里输入name:ipod,点击下面的Execute Query,我们应该可以看到搜索结果。另外这个新的接口对Chrome之外的浏览器可能js的兼容性不是太好,可以访问老版的接口http://localhost:8080/Lucene-Solr-NightlyBuild/admin/ (呵呵,这个是不是更熟悉一些),里面也有各种管理和查询功能。

               12. 调试,用Ctrl+Shift+R/T找到SolrDispatchFilter,你也可以自己在左边的Package Explorer里找到它,这样可以熟悉Lucene和Solr的代码结构。然后在140行方法public void doFilter 里加入一个断点。然后执行一个查询,这时应该会到断点,这就说明我们可以调试代码,跟踪阅读代码啦! 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的代码结构。

猜你喜欢

转载自sealbird.iteye.com/blog/1276609