qweewq123qwe 发表于 2016-12-16 08:29:38

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

  转自:http://www.zihou.me/html/2011/04/17/3470.html
  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、官方网址
  http://lucene.apache.org/solr/
  2、快速了解
  在之前,必须确保你的JDK版本是1.6 版本或更高。
  2.1.运行
  下载二进制包后,解压出来,在example目录下有个start.jar包,在DOS界面中进入到这个目录,运行命令:
  user:~/solr/example$ java -jar start.jar
  会输出一些信息如下图:

  在这里,是启动了Jetty这一Solr自带的Web服务器,所以你不需要再启动其他的Web服务器比如Tomcat。
  启动后,你可以通过http://localhost: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.搜索数据
  现在你可以搜索数据了,通过如下的链接:
  http://localhost:8983/solr/select/?q=solr&start=0&rows=10&indent=on
  或者直接在http://localhost:8983/solr/admin/的界面中输入搜索词,然后点搜索按钮搜索即可,在这里我建议你使用Firefox浏览器来看搜索结果,因为Firefox浏览器可以直接在页面中显示结果的XML样式,而Google浏览器则不是。
  在这里提到了三种不同的搜索:
  一个是只搜索某一词,比如
  http://localhost:8983/solr/select/?q= video
  一个是只搜索指定属性内容,比如:
  http://localhost:8983/solr/select/?q=name:video
  另一个是我们熟知的多个词以空格隔开进行搜索:
  http://localhost: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.返回指定字段结果
  如果你想指定返回某些字段的结果,可以采用如下的形式:
  http://localhost:8983/solr/select/?indent=on&q=video&fl=name,id
  也就是fl=name,id表示只返回name和id的结果
  2.7.对结果排序
  如果想结果按照某一规则排序,可以采用如下形式:
  http://localhost:8983/solr/select/?indent=on&q=video&sort=price+desc
  表示结果按照price desc结果排序
  或者用某一方法来对结果排序:
  http://localhost:8983/solr/select/?indent=on&q=*:*&sort=div%28popularity,add%28price,1%29%29+desc
  2.8.结果高亮显示
  有时我们希望在显示的结果中查询词能高亮显示出来,就如同Google所做的那样,同样Solr也可以做到,如:
  http://localhost:8983/solr/select/?wt=json&indent=on&q=video+card&fl=name,id&hl=true&hl.fl=name,features
  表示要高亮显示的字段结果为name,features,高亮的字符为video.
  2.9.分面搜索
  分面是指事物的多维度属性,比如一首歌曲包括演唱者、作曲者、作词者等。
  在Solr的说明中是指当一个查询结果若干文档出来后,在此基础上可以根据属性或分类来显示符合属性或分类的又有多少条。这种搜索往往可以给搜索者更好的搜索自由度,搜索者可以根据返回的结果分类来深挖或更好得到自己的搜索结果,如下面这个例子就是搜索所有的文档并根据分类字段cat来显示符合的条数
  http://localhost:8983/solr/select/?wt=json&indent=on&q=*:*&fl=name&facet=true&facet.field=cat
  2.10.搜索界面
  Solr也提供了一个搜索图形界面,地址如:
  http://localhost:8983/solr/browse
  Solr的文档地址:
  http://www.zihou.me/docs/solr/api/solrj/index.html
页: [1]
查看完整版本: Solr:强大的企业级搜索引擎平台