solr in Action 中文2.0 了解Solr

这章主要内容有:

            1.下载安装Solr4.7

            2.启动solr服务器例子

            3.排序,分页,结果格式化

            4.探索solritas示例搜索界面

 

当你用新的技术,产生不安很自然。但是你可以放心使用solr,因为它被设计用来便于安装和使用,在敏捷开发下,你可以从基础到复杂逐步配置你的solr配置。例如,solr允许你将一个大索引拆成小碎片,被称为分片,并增加副本来增加你的服务的查询能力。但是你在一定规模之前不用担分区和复制。

 

到了本节的末尾,你就可以将solr运行在你的计算机上,知道怎么运行和停止solr服务器。知道你的web管理员控制台,有个基本的理解对于solr的感念比如solr home,core 和collection

 

叫什么名字?

你也许听说过solrCloud,而且很困惑solr4和solrCloud的区别。从技术上来说,SolrCloud是一个solr4的特性,

让分布式运行和配置更容易,是一个容错集群。

 

同时,solrcloud没有什么在云计算环境中运行Solr比如Amazon EC2,尽管你也可以在云计算环境运行solr。

 我们推测“云”的名字的一部分反应了solrCloud的目标特性是服务的弹性扩展,和高可用性。我们将在第13节深入讲解。

 

让我们开始从apach官网下载solr,并安装到你电脑上

2.1 开始

当你了解solr之前,你得先把它运行到你本地计算机上,这里我们从Apache网站下载solr4.7。安装过后,我们向你展示怎么启动solr服务器例子,并且通过浏览器访问solr管理控制台。在这个过程中,我们假设你执行简单的命令行。solr没有图形安装界面。

2.1.1安装solr

安装solr有点用词不当,你全部要做的就只是下载包,解压包。在做之前,确保你已经安装jdk1.6以上的版本。

如果你没有安装jdk,赶紧去下载一个。

我们将在12章节讲解solr源码

在http://lucene.apache.org/solr 这个网址下载Solr。

 下载好之后,把下载的文件移动到你计算机稳定的文件夹下。在windows,你应该把它放到c:\root 目录,在linux系统,放到\opt\solr\文件夹下。对于windows用户,我们强烈建议,solr所在的目录不要有空格。避免solr在这种个目录C:\Documents and Settings\ 或 C:\Program Files\。你可以选择不同的这,但由于Solr是基于Java的软件,包涵空格的路径或许会有问题。

不需要传统安装过程,Solr在一个单一的文件是独立的,你只需要解压就行了。当你解压这个文件,所有的文件都会放在solr-4.7.0/目录底下。

图2.1  ,solr目录结构

2.1.2启动solr服务器例子

打开命令行,敲入以下命令

cd $SOLR_INSTALL/ex ample

java -jar start.jar

$SOLR_INSTALL/只是一个别名,你安装到哪里就是哪里。

在初始化的时候,你可以观察一下控制台的log信息,你可以看到如下log信息

3504 [main] INFO org.eclipse.jetty.server.AbstractConnector  – Started

[email protected]:8983

发生了什么?

你可能想知道完成了什么。要弄清这个问题,你现在要运行solr4.7。你可以验证solr是否启动正确,访问下面这个地址http://localhost:8983/solr。图2.2是solr控制台的截屏,请花一分钟的时间去熟悉的布局和导航工具

图2.2  ....

在这个场景下,start.jar运行一个java web服务 叫jetty,监听8983端口,solr是运行在jetty上的一个web应用,图2.3 说明在你电脑上正在运行的是什么东西。

图 2.3   从系统的角度展示了Solr的Web应用程序的发布

故障排除

查看默认端口8983是否被另外一个进程占用,其他的没什么好说的

Jetty vs Tomcat

我们推荐一开始学习Solt的时候用jetty,如果你们的组织用Tomcat或者其他java web 程序。你可以发布war包文件.我们推荐你读第12章节去学习如果发布solrWar文件

solr用Jetty启动无需配置,但这不意味着生产环境用Jetty是一个坏的选择。

停止Solr

本地操作,你可以直接Ctrl -c结束进程。

现在我们已经有一个运行着的服务器,现在让我们花一会儿时间去看看solr的配置和它的索引存放地点,理解这个solr例子的配置,有助于你为你的应用配置solr服务器。

2.1.3 理解Solr home

在solr ,核心是一组配置文件,Lucene索引文件和solr的事物日志,一个solr运行可以运行多个核心,回顾第一部分,我们设计一个真正的房产搜索应用,一个房子核心和一个土地上市的核心,索引结构不同所以我们用了两个核心。

简单来说,solr同样使用term集合,在第13节我们讨论solrCloud的时候我们再讨论 core和collection的区别。

solr home是一个目录结构,封装了一个或多个核心。原来核心被配置文件solr.xml配置。但是在solr4.4,内核可以自动发现和不需要被定义在solr.xml。因此,你可以忽略solr.xml文件,它包含高级选项只适用于云模式运行Solr。Solr还提供了一个核心管理API,允许你去创建,更新删除以编程方式.我们将在12节详细讨论这个问题,

现在,最重要的是要理解每个Solr服务器都只有一个solr home目录,并且包涵所有cores,全局的java系统属性 solr.solr.home  设置了本地Solr目录   图 2.4 展示solr home下的目录列表

图2.4 默认的solr  home 目录列表。它只有一个单一的核心叫collection1,配置在solr.xml中,这个collention1目录包涵核心配置文件,lucene索引,一个事物操作日志

我们学习更多关于Solr配置文件,名叫 solrconfig.xml在第4章节,同样,schema.xml 是主要的配置文件来管理索引结构,和文本分析,还有查询。在第5章详细讲解schema.xml 。

 这个例子目录包含其他两个solr目录。 example/example-DIH提供一个solr例子来学习 DIH特性。example/multicore/这个目录提供一个多核心的例子。

2.1.4添加索引文档

当你一开始启动Solr,solr里没有任何索引,是一个空服务器,我们将在第5章介绍更多关于建立索引的知识,现在我们先不管那么多,先添加一些索引,添加之后就可以试试查询了。打开命令行:

cd $SOLR_INSTALL/example/exampledocs

java -jar post.jar *.xml

 你可以看到下面一些输出信息

 SimplePostTool version 1 .5

Posting files to base url http://localhost:8983/solr/update using contenttype application/xml..

POSTing file gb1 8030-example.xml

POSTing file hd.xml

POSTing file ipod_other.xml

POSTing file ipod_video.xml

POSTing file manufacturers.xml

POSTing file mem.xml

POSTing file money.xml

POSTing file monitor.xml

POSTing file monitor2.xml

POSTing file mp500.xml

POSTing file sd500.xml

POSTing file solr.xml

POSTing file utf8-example.xml

POSTing file vidcard.xml

1 4 files indexed.

COMMITting Solr index changes to http://localhost:8983/solr/update..

post.jsr这个文件以post方式发送xml文档给solr.当所有文档都发送完了,post.jar会做一个提交(commit)操作。然后索引就被提交到solr中了。为了确认示例文档是否添加成功,我们到solr管理后台查询页,执行查询所有文档命令:*:*。你得选collention1在下拉框里,图2.5给你展示了查询结果

图2.5

2.2  搜索到底是什么东西

现在该看看solr最闪亮的地方,毫无疑问,solr最强力的地方是强大的查询处理。想想这种情况,如果你的搜索不行,谁关心你的服务器是不是分布式的,是不是够快。在这一节,你可以看看solr搜索实战能力,思考一下solr为什么有那么强大的搜索技术。

2.2.1探索Solr的查询形式

 

你已经用solr的查询格式做了一次全查,让我们快速过一遍这个格式的其他特性,图2.6提供了solr的关键查询形式,花几分钟好好读读。

图 2.6

在图2.6中,q  fq  sort  start  rows  fl   df  wt  分别有自己的意思

正如我们第一节说的,solr服务器对外提供http接口,当你运行query表格,其实是发了一个http  Get请求给solr.

要不要看更多查询例子?

我们将在第7部分详细讨论查询,如果你不想等那么长时间,我建议你看一下solr的内置教程,在这个目录底下  $SOLR_INSTALL/docs/tutorial.ht ml,这个文件里,你可以看到很多示例。

这个设计不是为了最终用户,而是为了你的UI端,我们将在后面详细讲解

2.2.2solr返回值是什么

图2.7给你展示了  solr的返回值都是什么东西。

2.2.3排名检索

solr和其他NoSql技术最关键的不同就是,排名检索。排序文件的过程中,最相关的文件列在第一位。

我们来看看排名检索是怎么工作的  在第2.1.4章节。开始的时候,在q输入框输入iPod,在fl输入框输入name,features,score 。并且点击执行,返回三个文件,根据评分排序。仔细观察一下结果。

很明显,ipod在第一个文档里出现了三次, 两次在name值域,一次在features值域。在其他文档里,只出现一次,评分(score)的数值其实没有什么实际意义。不能比较两次查询的Score值

接下来,改变搜索条件为iPod power 你可以看到同样查出来是三个文件,还是和上次一样的顺序。这是因为这三个文档都包含查询条件在他们的值域中,但是前两个的评分更接近,1.521和1.398。这是因为 power出现两次在第二个文档。

现在改变你的查询条件 为  iPod power^2,将  power关键字的权重变为2.简单来说,power关键字比ipod关键字重要两倍。这次,同样的三个文档返回的顺序不一样。

现在你已经对排名检索有所了解了,你可以在第3、7、16章中学到更多排名检索的知识

2.2.4. 分页和排序

我们的示例solr包含32个文档,但是一个真正生产环境的solr包含几百万分文档。你可以想象在一个电子商城,输入ipod会返回上千个结果,为了保证搜索结果的速度,节省移动设备的流量。你不必一下子返回全部结果

分页

解决方案就是分页,取结果的一小部分。分页是solr的第一类概念,每次查询都会有页面大小,和起始位置这两个参数。如果请求中没有指定,solr默认页面大小是10。如果要访问下一页,你的起始位置要增加页面大小这样一个数字,比如,如果你在第一页(start=0),现在想到下一页。你要把起始位置变为10(start=10)。

页面尽可能小到满足你的需求就可以了,因为底层的Lucene索引不会一次优化很多文件。相反,Lucene的查询处理优化最先考虑匹配和评分文件。一旦搜索结果是确定的,Solr必须重构每个文档,这需要读取磁盘。虽然它采用了只能缓存技术,但是比起查询来说,结果文档重构是比较缓慢的,特别对于大文件来说。因此,页面要尽可能小

排序

在 2.2.3节我们说过,结果按相关性得分降序排序。你可以让solr按照你指定的值域排序。在2.2.1节有个例子,按照价格排序。

排序和分页一起来讲,是因为排序确定结果分页位置。如果得分相同怎么办?

即使得分一样,solr也能返回一个确定的顺序。这是因为solr找到所有的匹配结果,然后进行分页和排序偏移。Solr跟踪整套文件,顺便说一句,如果所有文件都是一样分手,那么按索引顺序返回。这是一个基于Lucene的内部文档ID。内部文档id大致等同于索引的顺序。但是你不应该依赖排序的值,因为这根据你的索引变化而变化。

2.2.5扩展搜索功能

solr管理控制台查询,有一排复选框,可以在查询处理中启用先进的功能。如图 2.6,表单包括以下内容:

           1.dismax    最大查询分析器

            2.edismax   扩展最大查询分析器

            3.hl  高亮

            4.facet  分类

            5.spatial  空间查询  比如按照geo 距离排序

            6. spellcheck  拼写检查    

如果你点击这些复选框,你可能不清楚它们是用来做什么的。因为使用这些组件需要额外的知识。在本书的后面我们会介绍这些知识。

现在,通过使用solr管理后台我们可以看到一些搜素特性,看图 2.8

http://localhost:8983/solr/collection1/browse

在图 2.8的上面  Solr提供了三个选择:Simple, Spatial, and Group By

2.3 solr  管理员控制台的工具

2.4  把例子改造成你需要的

现在你有了示例solr服务器,你想知道怎么改造成你想要的吗?你可以复制一份solr home,然后改吧改吧就行了

2.5. 总结

猜你喜欢

转载自limeng650419.iteye.com/blog/2221621