1.solr简介
采用Java开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http G SolrJ操作提出查找请求,并得到XML格式的返回结果。
2.Solr 与 Lucene 的关系
首先Solr是基于Lucene做的 , Solr的目标是打造一款企业级的搜索引擎系统,因此它更接近于我们认识到的搜索引擎系统,它是一个搜索引擎服务,通过各种API可以让你的应用使用搜索 服务,而不需要将搜索逻辑耦合在应用中。而且Solr可以根据配置文件定义数据解析的方式,更像是一个搜索框架,它也支持主从、热换库等操作。还添加了高亮、facet等搜索引擎常见功能的支持
3.solr搭建运行
上篇说到了,将solr放入到tomcat里面运行,现在说另一种方式。
(1)、解压solr-4.7.0.zip到你想到存放的路径,比如:C:\tomcat\solr\solr-4.7.0
(2)、cmd打开命令行窗口,进入C:\tomcat\solr\solr-4.7.0\example目录
(3)、执行命令:java -jar start.jar
(4)、通过第三步以后,系统会启动solr自带的jetty服务器,通过 http://localhost:8983/solr/便可访问solr。
此时,solr已成功启动
4.创建索引
此时solr已安装并启动,但是还没有索引,只有创建好索引,搜索才能有结果
(1)、cmd进入/solr/example/exampledocs目录
(2)、执行命令:java -jar post.jar solr.xml monitor.xml,此时你已成功提交了2个solr文档
(3)、执行完第二步后,我们可以通过浏览器访问:http://localhost:8983/solr/collection1/select?q=solr&wt=xml
(4)、如果你想导入更多的文档,执行命令:java -jar post.jar *.xml
5.更新索引
当你重复执行命令:java -jar post.jar *.xml后,发现搜索的结果没有出现重复的数据,原因:example目录下的schema.xml中指定了列id为uniqueKey(即:唯一),所以当你重复提交数据到索引库时,id相同的数据会替换原来document中的数据。
如果你想要得到重复的数据,你可以通过修改exampledocs目录下*.xml中id值的方式实现
6.删除索引
(1)、执行命 令:java -Ddata=args -Dcommit=false -jar post.jar “<delete><id>SP2514N</id></delete>”,可以删除id为 SP2514N的document
(2)、执行第一步后,再去搜索发现搜索结果中还有id为SP2514N的数据,难道我们第一步删除不成功吗?其实不是,因为第一步的命令中-Dcommit=false,所以第一步的删除操作没有提交到索引(index)中。
(3)、在没有打开新的searcher之前,第一步删除数据会一直存在于搜索结果中,所以我们可以强制打开一个新的searcher,执行命令:java -jar post.jar -
7.查询索引
solr通过http以get的方式进行搜索数据,如:http://localhost:8983/solr/collection1/select?q=solr&wt=xml
q:查询的关键词(此时查询的字段是solrconfig.xml中指定的默认查询字段<str name=”df”>text</str>)
fl:搜索结果返回的字段
sort:排序
wt:搜索结果返回格式
q=video&fl=name,id (return only name and id fields)
q=video&fl=name,id,score (return relevancy score as well)
q=video&fl=*,score (return all stored fields, as well as relevancy score)
q=video&sort=price desc&fl=name,id,price (add sort specification: sort by price descending)
q=video&wt=json (return response in JSON format)