solr是apache一个基于lucene开发的的完整搜索引擎解决方案。lucene只提供了建立索引和搜索的API接口,相当于一个内核,没有提供实际可用的将外部数据转化为lucene索引的方案或接口。而solr则提供了这样的一个功能,用户只需做简单的配置,即可将外部数据如数据库、office文档、PDF、页面文件等转化为索引文件,然后就可以基于这些数据和solar封闭的查询接口进行数据搜索。
solr使用HTTP的方式外外部程序进行交互。即用户做好配置之后,将之发布为一个web服务,其它程序可以以HTTP的形式调用solr发布的服务,下发诸如更新索引、查询XXX关键字等的指令,solr以xml、json、csv等格式将查询的结果返回给调用者。
solr发布的服务相当于一个Web应用,该应用可以包含若干个数据处理模块,每个模块有自己的索引数据,完成各自的对外部数据进行索引和搜索的功能。这样的每一个模块称之为一个core,对solr而言,每个core是独立的,是互不影响的。而整个solr服务发布的过程其实就是web容器加载solar应用+solr应用加载各个core的过程。
整个web服务发布过程solr已经控制好了,以solr-4.7.0版本为例,solr在example目录下提供了一个start.jar,该jar会在加载时会先找到JVM参数solr.solr.home对应的目录,如果环境变量不存在,则找start.jar所在的目录下的solr,遍历该目录下的直接子目录,找出含有core.properties文件的子目录,该子目录会被作为是一个core加载至solr的Web应用中。环境变量solr.solr.home对应的目录称之为SOLR_HOME,在solr较早的版本中,对core的识别是通过SOLR_HOME目录下的solr.xml配置的,在4.7.0版本中不需要该文件。
solr的example目录中自带了一个叫做collection1的的core,这里总结一下将core发布成其它名字的步骤(solr支持在tomcat等其它容器中发布,此处只总结使用solr自带的jetty发布的方法):
1.复制solr解压目录后的example目录,重命名为其它名字,如MySolr;
2.删除MySolr目录下的无用目录,如example-DIH、exampledocs等,当然也可以不删;
3.进入MySolr/solr目录,将collection1目录重命名为其它名字,如CoreTest;
4.编辑MySolr/solr/CoreTest目录下的core.properties文件,该文件中目前只有一行:name=collection1,将collection1修改为你需要的core名字,如core1;
5.命令行进入MySolr目录下,执行java -jar start.jar启动solr服务。当然也可以将MySolr/solr目录拷贝至其它目录如C:\,然后执行java -Dsolr.solr.home=C:\solr -jar start.jar.
服务启动成功后,浏览器输入localhost:8983/solr即可打开solr管理页面:
core目录中的core.properties除了name属性外,还可以配置一些其它属性,各属性作用如下:
name: core的名字,必需
config: core配置文件存放路径,默认为conf\solrconfig.xml
dataDir: 存放索引及updatelog的目录,默认为data
ulogDir: 存放updatelog的目录,默认为data\tlog
schema: 用于配置core的索引结构的配置文件,默认为conf/schema.xml
loadOnStratup: 是否在solr启动时自动加载该core
transient: 当solr的transientCacheSize达到设定值后该core是否可以被自动卸载
学习solr刚两天,以上是个人的一些想法和总结,如有不对,敬请指正
平时没有总结的习惯,今天总结一下,发现问题不少:一些自以为理解的东西在描述的时候才发现并不是那么的清楚,而且如何将自己知道的东西准确讲述出来也是一个问题,今天这一点东西写了两个多小时。。。后面需要注意总结,希望能把写博客坚持下去