中国产经网

产经行业的
探索与发现
更多行业干货分享,关注中国产经网Www.chinaice.cN

Solr:强大的企业级搜索引擎平台

更新时间:2017-05-06 06:49点击:

1 Star

2 Stars

3 Stars

4 Stars

5 Stars

(No Ratings Yet)

Solr:强大的企业级搜索引擎平台

Loading...

Solr:强大的企业级搜索引擎平台

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

会输出一些信息如下图:

Solr:强大的企业级搜索引擎平台

在这里,是启动了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.分面搜索

分面是指事物的多维度属性,比如一首歌曲包括演唱者、作曲者、作词者等。