Solr 是基于Luncene的开源企业搜索服务,提供了一个打包即用的解决方案[使用Luncene集成化需要处理索引管理、分析器等一系列的问题,自己实现还是相对麻烦的],solr对外以Http协议服务,增加了很多的辅助功能,核心集成luncene.
Lucid Imagination is the first commercial company exclusively dedicated to Apache Lucene/Solr open source technology. 提供了商业的解决方案
.net软件中如果绿色集成这个软件比较方便,否则安装一串东西很麻烦,无法体现 .net的xcopy的部署形式,本文针对.net程序集成solr服务的步骤进行描述
另一方面lucene.net(C#版本)的版本更新和Luncene落后不少,因此基于solr还是一个很好的解决方案(solr几乎可以和Luncene同步更新,毕竟两者的偶合不大)
参考官网
http://www.lucidimagination.com/
概念
Solr 1.4 Enterprise Search Server.pdf lucidworks-solr-refguide-1.4.pdf 这两本书对solr的增强处理内容和语法等进行了详尽的描述,具体的配置和使用可参考这两本书
SolrCores
It's possible to segment Solr into multiple virtual instances, or cores, each with its own configuration and indices. Cores may be dedicated to a single application or to very different ones, but all are administered through a common administration interface. You can create new SolrCores on the fly, shutdown cores, even replace one running core with another, all without ever stopping or restarting your servlet container.
SolrCores对于需要分组管理索引的情况很有用,如所有的内容在一个索引库太大时可以分开,或者本身就是独立的资源。
SOLR绿色服务配置
由于现有的系统有32位、64的区别,以32位为例说明(64位的性能更高,我测试发现差不多有一倍的提高,JDK、Tomcat是分别发布的不同架构,32位和64位主要是这个区别)
以下是x86架构的目录结构
(服务使用的tomcat7,Jetty7 作为服务运行有些麻烦)
JDK的部署:把其他机器的安装好的JDK整个目录放在JDK上
Tomcat7:把其他机器的安装好的tomcat整个目录放在tomcat上, 把Lucid Imagination 的版本安装报SolrInstaller-1.4.1.jar中 lucidworks\webapps\solr.war的 solr.war放在tomcat7\webapps目录下
Solr:solr目录是默认的一些solrcores的配置文件和相关库,默认索引文件也存在这个目录下(coreX是其中的一个core),详细内容参考:http://cid-56b433ad3d1871e3.office.live.com/self.aspx/.Public/solr86.rar
根目录:启动和服务的运行文件,参考下载:http://cid-56b433ad3d1871e3.office.live.com/self.aspx/.Public/solr86.rar
如:启动服务 start.bat
set JAVA_HOME=%cd%\jdk\
set CLASSPATH=%cd%\jdk\lib;
set PATH=%PATH%;%JAVA_HOME%
set CATALINA_HOME=%cd%\tomcat7
cd %0\..\
tomcat7\bin\catalina.bat run
:: SET /P M=Press ENTER:
solr.xml 对solrcores配置的文件
<?xml version="1.0" encoding="utf-8"?>
<solr persistent="false" sharedLib="lib">
<cores adminPath="/admin/cores" shareSchema="true">
<core name="coreX" instanceDir="coreX" />
</cores>
</solr>
示范coreX目录下的conf关键文件
solrconfig.xml
schema.xml
jdbc.xml:对数据库建立索引的设置
lib下:sqljdbc4.jar sql server的jdbc驱动
data:默认的索引目录
经过如上配置后,可以在任意个部署的机器使用start.bat启动solr服务,stop.bat关闭服务,svc.bat ***安装服务Service,绿色运行solr
出错的话在tomcat7\logs\catalina.****.log 日志中查看原因
启动后,就可以使用solr服务
总入口 |
|
某个solrcore的管理入口(如coreX) |
|
数据库导入的人口 |
http://localhost:8080/solr/coreX/admin/dataimport.jsp?handler=/dataimport 只要按照jdbc.xml建立好数据库,可以使用如上地址导入数据建立索引 |
.net集成
基于DRY原则,还是使用已有的库最好[自己根据约定的HTTP协议格式写当然完全没有问题]
mausch-SolrNet-0.3.0-0-g9fd45cd.zip |
这个是较新的项目 |
solrsharp-Dec-30-2007.zip |
这个项目较早,近来更新比较少 |
如下SolrNet的一个sample例子效果,实现的效果还是相当的强
搜索的性能
方案完成后,对性能担心的话,可以看看性能,如果一下收集百万或千万条数据困难的话,可以在MusicBrainz.org下载很多的开放数据 http://musicbrainz.org/doc/Database_Download (最好使用数据库格式的)
我测试在2.8GCPU上的新建索引其中一个文件60万个数据条目约4~5分钟,600万条20~25分钟间完成(64位的版本速度提高查不到一倍),速度还是相当的快,在这个索引上的查询一般几十毫秒就完成了,如果有更高的搜索质量、性能要求,首先可以修改solr的配置,加入相关的插件,一般情况应该可以解决问题(基于Lucene的解决方案实在很多),实在有问题的话可以自己开发定制
至此,我们可以使我们的应用增加了检索的功能。【集成发布的产品和方案注意solr的授权协议】