更新时间:2017-05-06 06:49点击:
Loading... Solr是Lucene下面的一个用Java写的开源子工程项目,它是一个非常强大的企业级搜索平台,它的主要特征包括强大的全文检索、高亮显示、分面搜索、动态聚类、数据库集成、富文本(比如word、PDF)及地理空间搜索等。Solr高度可扩展,提供分布式搜索及索引复制,它为许多世界上大的网站提供了强大的搜索服务,诸如CNet、Zappos等。
Solr使用Lucene的搜索核心库来做全文检索,它的接口采用HTTP/XML和JSON APIs传输数据,这使得它更易用并可以支持不同的语言。Solr强大的配置可以允许它被定制成各种没有Java代码的应用,你还可以通过扩展它的插件来获得更多的自定义功能。
目前Solr最新版本是3.1.0,这与它的上一个版本1.4.1在版本号方面有很大跳跃,这主要是为了跟Lucene的版本号相对应的,因为Lucene的版本目前也是3.1.0.
1、官方网址
2、快速了解
在之前,必须确保你的JDK版本是1.6 版本或更高。
2.1.运行
下载二进制包后,解压出来,在example目录下有个start.jar包,在DOS界面中进入到这个目录,运行命令:
user:~/solr/example$ java -jar start.jar
会输出一些信息如下图:
在这里,是启动了Jetty这一Solr自带的Web服务器,所以你不需要再启动其他的Web服务器比如Tomcat。
启动后,你可以通过:8983/solr/admin/来打开Solr的例子搜索界面,在这个界面中,你就可以进行搜索了,当然,你在搜索后可能会奇怪,为什么搜索不到任何东西呢?很简单,那是因为现在还没有任何的索引。
2.2.添加索引数据
我们可以通过XML格式的形式向Solr提供数据,Solr会给这些数据创建索引,在目录example\exampledocs中有些测试数据,这时我们另开一个Dos窗口,进入到example\exampledocs目录,并运行如下命令:
java -jar post.jar solr.xml monitor.xml这样我们将solr.xml和monitor.xml中的数据就提交给了solr。
当然你也可以提交这个目录下所有的xml数据,只须运行如下命令:
java -jar post.jar *.xml
2.3.搜索数据
现在你可以搜索数据了,通过如下的链接:
:8983/solr/select/?q=solr&start=0&rows=10&indent=on
或者直接在:8983/solr/admin/的界面中输入搜索词,然后点搜索按钮搜索即可,在这里我建议你使用Firefox浏览器来看搜索结果,因为Firefox浏览器可以直接在页面中显示结果的XML样式,而Google浏览器则不是。
在这里提到了三种不同的搜索:
一个是只搜索某一词,比如
:8983/solr/select/?q= video
一个是只搜索指定属性内容,比如:
:8983/solr/select/?q=name:video
另一个是我们熟知的多个词以空格隔开进行搜索:
:8983/solr/select/?q=%2Bvideo+%2Bprice%3A[*+TO+400]
有多种方式将数据导入到Solr中如:
使用Data Import Handler (DIH)将数据库中的数据导入
从CSV文件中导入
通过JSON文件导入
索引富文本文件比如WORD、PDF等
通过SolrJ 或其他 Solr客户端创建一些文档传递给Solr.
2.4.更新数据
你可能注意到solr.xml里的数据即使两次提交到服务中,但仍然没有一条重复的结果,比如当你搜索solr的时候,这是因为在这个例子中,schema.xml定义了一个唯一标识的ID,所以只要是相同的ID,那么新的文档将替换掉已有的相同ID的文档。
2.5.删除数据
你可以通过提交一个删除命令到服务中删除数据,比如一个ID,或者一个查询(在此情况下得注意,因为符合查询的可能不止一条记录,也就是你将删除多条数据)。在这里,我们可以通过执行如下命令:
java -Ddata=args -Dcommit=no -jar post.jar "<delete><id>SP2514N</id></delete>"来进行删除id为SP2514N的记录。
但你此时如果查询id为SP2514N的记录还是会查询到该条记录,原因是虽然是提交了删除,但这个操作是不可见的,除非一个新的搜索打开,所以要想使得上面的删除生效,则可以执行如下命令:
java -jar post.jar此时,你可以发现此条记录已经不能被搜索到了。
但commit是一个非常昂贵的操作,最好的方式是你批处理一批更新操作,最后才执行提交命令。还有一个优化的命令optimize可以起到与commit相同的效果,optimize的作用就是将多个索引段合并成一个段。
2.6.返回指定字段结果
如果你想指定返回某些字段的结果,可以采用如下的形式:
:8983/solr/select/?indent=on&q=video&fl=name,id
也就是fl=name,id表示只返回name和id的结果
2.7.对结果排序
如果想结果按照某一规则排序,可以采用如下形式:
:8983/solr/select/?indent=on&q=video&sort=price+desc
表示结果按照price desc结果排序
或者用某一方法来对结果排序:
:8983/solr/select/?indent=on&q=*:*&sort=div%28popularity,add%28price,1%29%29+desc
2.8.结果高亮显示
有时我们希望在显示的结果中查询词能高亮显示出来,就如同Google所做的那样,同样Solr也可以做到,如:
:8983/solr/select/?wt=json&indent=on&q=video+card&fl=name,id&hl=true&hl.fl=name,features
表示要高亮显示的字段结果为name,features,高亮的字符为video.
2.9.分面搜索
分面是指事物的多维度属性,比如一首歌曲包括演唱者、作曲者、作词者等。