基于Solr 3.5搭建搜索服务器
Solr已经发布3.5版本了,同时它是基于Lucene 3.5的。我们在基于Solr进行二次开发之前,首先要搭建起一个搜索服务器,在熟悉Solr的基本功能的基础上,可以根据实际应用的需要进行个性化定制开发。因为Solr提供了一种插件机制,我们可以根据自己的需要进行定制,然后在Solr的配置文件中(solrconfig.xml)进行配置即可达到预期的要求。在Solr的发行包中给出了一个配置的例子,我们可以直接将其发布到Web容器中,通过浏览器访问来进行测试,具体如何配置,下面根据从易到难的方式,对每种方式进行详细的介绍。
?
?
?
?
?
?
这种方式,我们是直接使用Solr发行包给定的WAR包,一般来说通过它快速了解Solr是很有用的,而对于满足实际需要的开发还远远不够。
按照下面的步骤,进行安装、配置、验证:
第1步:将apache-solr-3.5.0\apache-solr-3.5.0\example下面的multicore拷贝到apache-tomcat-6.0.32\conf下面;
multicore目录下面包含了Solr的基本配置。Solr支持配置多个实例,亦即,可以启动多个实例来服务于前端不同的搜索请求,每个实例对应一个core,而这样多个core的配置是通过multicore\solr.xml进行配置的,然后在multicore下面的每个目录中对应着每个core的详细配置,具体包括schema.xml(配置与Lucene的Field、Analyzer等相关的内容)、solrconfig.xml(这个是Solr实例核心的配置)。
?
另外,如果在solrconfig.xml中没有指定<dataDir>索引目录配置,则默认会生成apache-tomcat-6.0.32\conf\multicore\data\index目录,该目录下面存储索引文件。
第2步:将apache-solr-3.5.0\apache-solr-3.5.0\dist下面的apache-solr-3.5.0.war拷贝到apache-tomcat-6.0.32\webapps目录下面;
这个不用过多解释,就是通过使用一个Web归档文件(WAR)来部署一个Web应用,我们的应用就是Solr搜索应用程序。
第3步:配置WAR程序的Context:在apache-tomcat-6.0.32\conf\Catalina\localhost下面(如果目录不存在,则手动创建),创建文件apache-solr-3.5.0.xml;
Context配置文件apache-solr-3.5.0.xml的内容如下所示:
?
?
?
[html]?view plaincopydocBase指定了我们的WAR文件的位置,上面的“solr/home”非常关键,在Web容器启动以后会加载Solr的基本配置并初始化相应的组件实例,它会根据指定的“solr/home”配置的路径去搜索相关的配置,例如,上面我们将“solr/home”指向了目录apache-tomcat-6.0.32\conf\multicore。
第4步:设置Solr的字符集;
默认Solr使用了UTF-8字符集编码,如果你的Tomcat不是的话,在执行中文搜索的时候可能会出现乱码。如果你的Tomcat默认8080端口请求字符集就是UTF-8,并且想使用这个默认的端口提供搜索服务,则可以修改apache-tomcat-6.0.32\conf\server.xml文件的内容,如下所示:
?
?
[html]?view plaincopy?
如果想使用一个新的未被占用的端口,则可以在apache-tomcat-6.0.32\conf\server.xml中增加一个配置,例如使用8888端口,配置内容如下所示:
?
[html]?view plaincopy?
通过上面的步骤,现在可以启动Tomcat服务器,在浏览器地址栏这种输入http://localhost:8080/apache-solr-3.5.0/,你会看到如下内容:
?
[html]?view plaincopy?
?
?
这种方式,我们不再使用Solr默认提供,并对我们非常透明的WAR包来搭建,而是根据Solr发行包中的相关内容来搭建,更确切地说,我们把Solr在一个开发工具上搭建起来,暂且不考虑源码层面的内容。我比较习惯使用MyEclipse,我使用了MyEclipse Enterprise Workbench 8.0集成开发环境。
遵循下面的步骤,就可以实现:
?
?
?
[html]?view plaincopy?
另外,这样是直接在web.xml中进行了硬编码配置,如果solr/home变化了,每次都需要修改web.xml文件。还有一种方式是,直接增加Web容器的启动选项来指定,如下所示:
?
[plain]?view plaincopy?
通过上面的配置,可以启动Tomcat服务器了,并通过访问http://localhost:8080/solr35来进行验证。
?
?
?
基于源码搭建的好处的就是,我们在开发过程中可以方便地进行调试跟踪,这样也能够便于更深入地了解Solr框架的执行机制。Solr是基于Lucene这个开源搜索引擎库开发的框架,通过了解Solr的源代码,你可以更深入地熟悉如何在Lucene之上构建适合自己的搜索应用,甚至你完全可以将Solr改造成自己需要的应用程序。一般来说,我们使用Solr搭建搜索服务器的适合,完全可以不需要熟悉Lucene是怎么样实现索引和全文检索的,但是在Solr上进行开发调试,如调试搜索的相关度时,就需要对Lucene有一定的了解,才能在调优的过程中事半功倍。
基于源码的搭建,我采用了一种Lucene和Solr的源代码都可以进行修改,即将Lucene和Solr的代码导入的开发环境中。具体如何导入,因为代码都是开源的,你可以使用任何方法实现,不再累述。这里,我们简单说一下,我将solr和Lucene分别导入到了两个工程中:Lucene Java Project、Solr Web Project。我把工程的.classpath文件粘贴一下,以供参考:
Lucene Java Project的.classpath文件内容如下:
?
[html]?view plaincopy?
?
[html]?view plaincopy?
?
?
这里,分享一些有关学习开发Solr的参考链接,可能在实际学习和开发中,会起到一些帮助。
?
[plain]?view plaincopy