Solr学习笔记.docx

上传人:b****4 文档编号:6652674 上传时间:2023-05-10 格式:DOCX 页数:67 大小:519.02KB
下载 相关 举报
Solr学习笔记.docx_第1页
第1页 / 共67页
Solr学习笔记.docx_第2页
第2页 / 共67页
Solr学习笔记.docx_第3页
第3页 / 共67页
Solr学习笔记.docx_第4页
第4页 / 共67页
Solr学习笔记.docx_第5页
第5页 / 共67页
Solr学习笔记.docx_第6页
第6页 / 共67页
Solr学习笔记.docx_第7页
第7页 / 共67页
Solr学习笔记.docx_第8页
第8页 / 共67页
Solr学习笔记.docx_第9页
第9页 / 共67页
Solr学习笔记.docx_第10页
第10页 / 共67页
Solr学习笔记.docx_第11页
第11页 / 共67页
Solr学习笔记.docx_第12页
第12页 / 共67页
Solr学习笔记.docx_第13页
第13页 / 共67页
Solr学习笔记.docx_第14页
第14页 / 共67页
Solr学习笔记.docx_第15页
第15页 / 共67页
Solr学习笔记.docx_第16页
第16页 / 共67页
Solr学习笔记.docx_第17页
第17页 / 共67页
Solr学习笔记.docx_第18页
第18页 / 共67页
Solr学习笔记.docx_第19页
第19页 / 共67页
Solr学习笔记.docx_第20页
第20页 / 共67页
亲,该文档总共67页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Solr学习笔记.docx

《Solr学习笔记.docx》由会员分享,可在线阅读,更多相关《Solr学习笔记.docx(67页珍藏版)》请在冰点文库上搜索。

Solr学习笔记.docx

Solr学习笔记

Solr笔记

 Solr是一种可供企业使用的、基于Lucene的搜索服务器,它支持层面搜索、命中醒目显示和多种输出格式。

在这篇分两部分的文章中,LuceneJava™的提交人GrantIngersoll将介绍Solr并向您展示如何轻松地将其表现优异的全文本搜索功能加入到Web应用程序中。

  一旦用户需要某种信息,就可以立即搜索到这些信息,这种要求再也不是可有可无的了。

随着Google和类似的复杂搜索引擎的出现,用户希望得到高质量的搜索结果,帮助他们快速、轻易地找到所需的信息。

经理对您的在线购物站点同样抱有很高的期望,要求它能够提供一个可伸缩、高度可用且易于维护的搜索解决方案,并且安装这个解决方案不应太昂贵。

对于您而言,只是希望事业进步,让老板和客户满意,以及保持头脑清醒。

  使用ApacheSolr可以满足所有的这些要求,它是一种开放源码的、基于LuceneJava的搜索服务器,易于加入到Web应用程序中。

Solr提供了层面搜索、命中醒目显示并且支持多种输出格式(包括XML/XSLT和JSON格式)。

它易于安装和配置,而且附带了一个基于HTTP的管理界面。

您可以坚持使用Solr的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。

Solr还拥有一个活跃的开发者群体,如有需要,您可以随时向他们寻求帮助。

  Solr的历史

  Solr最初由CNETNetworks开发,2006年初,ApacheSoftwareFoundation在Lucene顶级项目的支持下得到了Solr。

Solr于2007年1月酝酿成熟,在整个项目孵化期间,Solr稳步地积累各种特性并吸引了一个稳定的用户群体、贡献者和提交人。

Solr现在是Lucene(Apache的基于Java的全文本搜索引擎库)的一个子项目。

  安装和配置

  要开始使用Solr,需安装以下软件:

  Java1.5或更高版本。

  Ant1.6.x或更高版本。

  Web浏览器,用来查看管理页面。

建议使用Firefox;相比之下使用InternetExplorer可能要复杂些。

  servlet容器,如Tomcat5.5。

本文中的示例假定您的Tomcat在8080端口上运行,这是Tomcat的默认设置。

如果运行的是其他servlet容器或在其他的端口上运行,则可能要修改给出的URL才能访问示例应用程序和Solr。

我已经假定示例应用程序的各个部分都运行在Tomcat的本地主机上。

另外还要注意Solr以打包的方式与Jetty一起提供。

  要下载和安装所有这些应用程序,请参阅参考资料。

  设置Solr

  一旦搭建好运行环境,就可以从ApacheMirrorsWeb站点下载Solr1.1版。

接下来,执行以下操作:

  停止servlet容器。

  在命令行选择希望在其中执行操作的目录,从中输入mkdirdw-solr。

  输入cddw-solr。

  将Solr下载版本复制到当前目录中并解压缩。

即可得到apache-solr-1.1.0-incubating目录。

不用注意incubating标记;Solr早已孵化成熟。

  将SolrWAR文件复制到servlet容器的webapps目录中。

  下载示例应用程序,将其复制到当前目录,然后解压缩,即可在当前工作目录中得到一个solr目录。

本文将一直把它用作Solr的主目录。

  可以通过以下三种方式之一设置Solr的主位置:

  设置java系统属性solr.solr.home(没错,就是solr.solr.home)。

  配置java:

comp/env/solr/home的一个JNDI查找指向solr目录。

  在包含solr目录的目录中启动servlet容器。

(默认的Solr主目录是当前工作目录下的solr。

  将示例WAR文件(位于dw-solr/solr/dist/dw.war中)复制到servlet容器的webapps目录中,方法与复制SolrWAR文件相同。

WAR文件的Java的代码位于dw-solr/solr/src/java中,而JSP和其他Web文件位于dw-solr/solr/src/webapp中。

  要验证所有程序都正常运行,请启动servlet容器并将浏览器指向http:

//localhost:

8080/solr/admin/。

如果一切顺利,您应该看到类似图1所示的页面。

如果没有出现管理页面,查看容器日志中的错误消息。

另外,确保从dw-solr目录启动servlet容器,以便可以正确地设置Solr的主位置。

  图1.一个Solr管理屏幕示例

  关于Lucene

  要了解Solr就必须熟悉Lucene。

Lucene是一个基于Java的高性能文本搜索引擎库,最初由DougCutting编写,后来被捐赠给ApacheSoftwareFoundation。

很多应用程序都利用Lucene来增强自身的搜索功能,因为Lucene高速、易用和具有活跃社区的特点。

Solr构建在这些功能之上,使Lucene可供企业使用,并具有最小的编程需求。

  Solr基础

  因为Solr包装并扩展了Lucene,所以它们使用很多相同的术语。

更重要的是,Solr创建的索引与Lucene搜索引擎库完全兼容。

通过对Solr进行适当的配置,某些情况下可能需要进行编码,Solr可以阅读和使用构建到其他Lucene应用程序中的索引。

此外,很多Lucene工具(如Luke)也可以使用Solr创建的索引。

  在Solr和Lucene中,使用一个或多个Document来构建索引。

Document包括一个或多个Field。

Field包括名称、内容以及告诉Solr如何处理内容的元数据。

例如,Field可以包含字符串、数字、布尔值或者日期,也可以包含您想添加的任何类型。

Field可以使用大量的选项来描述,这些选项告诉Solr在索引和搜索期间如何处理内容。

我将在本文中稍后详细讨论这些选项。

现在,查看一下表1中列出的重要属性的子集:

  表1.字段属性

属性名称

说明

indexed

IndexedField可以进行搜索和排序。

您还可以在indexedField上运行Solr分析过程,此过程可修改内容以改进或更改结果。

下一节提供了关于Solr的分析过程的更多信息。

stored

storedField内容保存在索引中。

这对于检索和醒目显示内容很有用,但对于实际搜索则不是必需的。

例如,很多应用程序存储指向内容位置的指针而不是存储实际的文件内容。

  Solr的分析过程

  您可以在对应用程序内容索引之前运行Solr的分析过程来修改这些内容。

在Solr和Lucene中,Analyzer包括一个Tokenizer和一个或多个TokenFilter。

Tokenizer负责生成Token,后者在多数情况下对应要索引的词。

TokenFilter从Tokenizer接受Token并且可以在索引之前修改或删除Token。

例如,Solr的WhitespaceTokenizer根据空白断词,而它的StopFilter从搜索结果中删除公共词。

其他类型的分析包括词干提取、同义词扩展和大小写折叠。

如果应用程序要求以某种特殊方式进行分析,则Solr所拥有的一个或多个断词工具和筛选器可以满足您的要求。

  您还可以在搜索操作期间对查询应用分析。

一个总体规则是:

应该对查询和要索引的文档运行相同的分析。

不熟悉这些概念的用户常犯的一个错误就是:

对文档标记进行词干提取,但不对查询标记进行词干提取,通常导致零搜索匹配。

Solr的XML配置使它可以轻易地使用简单声明创建Analyzer,本文稍后会对此作出展示。

  有关Solr和Lucene的分析工具,以及索引结构和其他功能的更多信息,请参阅参考资料。

  示例应用程序

  以下各节将使用实际的示例应用程序向您介绍Solr的功能。

该示例应用程序是一个基于Web的博客界面,您可以使用它来记录条目、给条目指派元数据,然后索引和搜索条目。

在索引和搜索过程的每一步,您都可以选择显示发送到Solr的命令。

  要查看示例应用程序,请将浏览器指向http:

//localhost:

8080/dw/index.jsp。

如果一切设置正确(如“设置Solr”描述的那样),则您可以看到一个题为“SampleSolrBlogSearch”的简单用户界面,在标题的正下方有一些菜单项。

当您浏览本文的两个部分时,将会了解到菜单中的所有主题。

  索引操作

  在Solr中,通过向部署在servlet容器中的SolrWeb应用程序发送HTTP请求来启动索引和搜索。

Solr接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。

通过HTTP以同样的方式返回响应。

默认配置返回Solr的标准XML响应。

您也可以配置Solr的备用响应格式。

我将在本文的第2部分向您展示如何定制请求和响应处理。

  索引就是接受输入(本例中是博客条目、关键字和其他元数据)并将它们传递给Solr,从而在HTTPPostXML消息中进行索引的过程。

您可以向Solr索引servlet传递四个不同的索引请求:

  add/update允许您向Solr添加文档或更新文档。

直到提交后才能搜索到这些添加和更新。

  commit告诉Solr,应该使上次提交以来所做的所有更改都可以搜索到。

  optimize重构Lucene的文件以改进搜索性能。

索引完成后执行一下优化通常比较好。

如果更新比较频繁,则应该在使用率较低的时候安排优化。

一个索引无需优化也可以正常地运行。

优化是一个耗时较多的过程。

  delete可以通过id或查询来指定。

按id删除将删除具有指定id的文档;按查询删除将删除查询返回的所有文档。

  一个索引示例

  浏览到http:

//localhost:

8080/dw/index.jsp可以查看索引过程的更多细节。

首先为表单中的每个字段填入适当的条目并按Submit按钮。

示例应用程序接受条目、创建Solr请求并显示请求以便在下一个屏幕上查看。

清单1包含了一个add命令的例子,当您按下Submit按钮时向Solr发送这个命令。

清单1.Solradd命令样例

http:

//localhost/myBolg/solr-rocks.html

SolrSearchisSimplyGreat

solr,lucene,enterprise,search

2007-01-06T05:

04:

00.000Z

10

Solrisareadllygreatopensourcesearchserver.Itscales,It’seasytoconfigureandtheSolrcommunityisreallysupportive.

on

  清单1的中的每个field条目告诉Solr应该将哪些Field添加到所创建文档的Lucene索引中。

可以向add命令添加多个

稍后我将解释Solr如何处理这些field。

现在,知道包含清单1中指定的七个field的文档将会被索引就足够了。

  当您在“SolrXMLCommand”页面提交命令时,结果将发往Solr进行处理。

HTTPPOST将命令发往在http:

//localhost:

8080/solr/update运行的SolrUpdateServlet。

如果一切进展顺利,则会随返回一个XML文档。

Solr使用相同的URL自动更新文档(示例应用程序中的URL是Solr识别文档以前是否被添加过所使用的惟一id)。

  实践索引

  现在再添加几个文档并提交这些文档,以便在下一节中有文档可供搜索。

一旦您熟悉add命令的语法后,就可以取消选择Index按钮旁边的“DisplayXML...”复选框,跳过“SolrXMLCommand”页面。

本文附带的样例文件包含了一个很多这些示例中使用的索引版本。

  您可以通过在http:

//localhost:

8080/dw/delete.jsp页面输入文档的URL、提交并查看命令,然后将命令提交到Solr来删除文档。

有关索引和删除命令的更多信息,请参阅参考资料中的“SolrWiki”参考。

  搜索命令

  添加文档后,就可以搜索这些文档了。

Solr接受HTTPGET和HTTPPOST查询消息。

收到的查询由相应的SolrRequestHandler进行处理。

出于本文的讨论目的,我们将使用默认的StandardRequestHandler。

在本文的第2部分,我将向您展示如何为其他的SolrRequestHandler配置Solr。

  要查看搜索运行,返回到示例应用程序并浏览到http:

//localhost:

8080/dw/searching.jsp。

此屏幕应该与索引屏幕非常类似,只是增加了几个搜索相关的选项。

与索引类似,可以向各种输入字段中输入值,选择搜索参数并将查询提交给示例应用程序。

示例应用程序醒目显示了一些Solr中更常见的查询参数。

这些参数如下所示:

  关于查询语法的一点注意

  用于StandardRequestHandler的Solr查询语法与LuceneQueryParser支持的查询语法相同,只是前者加入了一些排序支持。

示例应用程序对输入的值几乎没有进行验证,而且没有演示如查询增强、短语、范围筛选等功能,所有这些功能在Solr和Lucene中都有效。

有关LuceneQueryParser的更多信息,请参阅参考资料。

在本文的第2部分,我将介绍管理界面中的一些有助于调试查询语法和结果的工具。

  布尔运算符:

默认情况下,用于合并搜索条目的布尔运算符是OR。

将它设为AND要求匹配的文档中出现所有的条目。

  结果数目:

指定返回的最大结果数目。

  开始:

结果集中开始的偏移量。

此参数可用于分页。

  醒目显示:

醒目显示匹配文档字段的条目。

参考清单2底部的节点。

醒目显示的条目标记为

  一旦输入和提交值后,博客应用程序就返回一个可以立即提交给Solr的查询字符串。

提交字符串后,如果一切正常并且存在匹配文档,则Solr返回一个XML响应,其中包含了结果、醒目显示的信息和一些有关查询的元数据。

清单2给出了一个示例搜索结果:

清单2.搜索结果示例

0

6

10

0

*,score

true

content:

”facetedbowsing”

1.058217

http:

//localhost/myBlog/solr-rocks-again.html

SolrisGreat

solr,lucene,enterprise,search,greatness

Solrhassomereallygreatfeatures,likefacetedbrowsingandreplication

Solrhassomereallygreatfeatures,likefacetedbrowsingandreplication

2007-01-07T05:

04:

00.000Z

solr,lucene,enterprise,search,greatness

SolrisGreat

http:

//localhost/myBlog/solr-rocks-again.html

//localhost/myBlog/solr-rocks-again.html”>

Solrhassomereallygreatfeatures,likefaceted

browsingandreplication

<./lst>

.

一条查询消息可以包含大量的参数,表2中对醒目显示的那些参数进行了描述。

参阅参考资料中的“SolrWiki”参考可以查看参数的完整清单。

 

  表2.醒目显示的查询参数

参数

描述

示例

q

Solr中用来搜索的查询。

有关该语法的完整描述,请参阅参考资料中的“LuceneQueryParserSyntax”。

可以通过追加一个分号和已索引且未进行断词的字段(下面会进行解释)的名称来包含排序信息。

默认的排序是scoredesc,指按记分降序排序。

q=myField:

JavaANDotherField:

developerWorks;dateasc

  此查询搜索指定的两个字段并根据一个日期字段对结果进行排序。

start

将初始偏移量指定到结果集中。

可用于对结果进行分页。

默认值为0。

start=15

  返回从第15个结果开始的结果。

rows

返回文档的最大数目。

默认值为10。

rows=25

fq

提供一个可选的筛选器查询。

查询结果被限制为仅搜索筛选器查询返回的结果。

筛选过的查询由Solr进行缓存。

它们对提高复杂查询的速度非常有用。

任何可以用q参数传递的有效查询,排序信息除外。

hl

当hl=true时,在查询响应中醒目显示片段。

默认为false。

参看醒目显示参数上的SolrWiki部分可以查看更多选项(见参考资料)。

hl=true

fl

作为逗号分隔的列表指定文档结果中应返回的Field集。

默认为“*”,指所有的字段。

“score”指还应返回记分。

*,score

  层面浏览

  最近,似乎所有流行的购物站点都添加了便利的条件列表,帮助用户根据制造商、价格和作者缩小搜索结果的范围。

这些列表是层面浏览的结果,层面浏览是一种分类方式,用于对已经返回到有意义的、已证实存在的种类的结果进行分类。

层面用于帮助用户缩小搜索结果的范围。

  通过浏览到http:

//localhost:

8080/dw/facets.jsp可以查看层面的运行。

在这个页面上,您需要关注两种输入形式:

  一个文本区域,您可以在其中输入查询,根据索引中的all字段发布此查询。

将all字段看作一连串已索引的所有其他字段。

(稍后将对此作详细介绍。

  一个可以用于分层面的字段下拉列表。

此处并未列出所有的已索引字段,其原因马上就会得到解释。

  输入一个查询并从下拉列表中选择一个层面字段,然后单击Submit与生成的查询一起传递给Solr。

博客应用程序解析结果并返回类似图2中的结果:

  图2.层面浏览结果示例

  在图2中,您可以在顶部看见所有非零值的层面计数,底部则是匹配所提交查询的两个搜索结果。

单击示例中的层面链接提交原始查询,另外将Facet关键字作为一个新关键字。

如果原始查询是q=Solr而层面字段是keywords,并且单击图2中的replication链接,则新查询将会是q=SolrANDkeywords:

replication。

  运行层面不需要打开它或在Solr中进行配置,但是可能需要按照新的方式对应用程序内容进行索引。

在已索引的字段中完成分层,层面对未进行断词的非小写词最为有效。

(因此我并未包含content字段或FacetField下拉列表中添加到文档的其他字段。

)Facet字段通常不需要存储,因为分层面的总体思想就是显示人类可读的值。

  另外还要注意Solr没有在层面中创建类别;必须由应用程序自身在索引期间进行添加,正如在索引应用程序时给文档指派关键字一样。

如果存在层面字段,Solr就提供了查明这些层面及其计数的逻辑。

  Solr模式

  迄今为止,我已向您介绍了Solr的特性,但没有实际解释如何配置这些特性。

本文的剩余部分主要介绍配置,首先介绍Solr模式(schema.xml)然后向您展示它如何与Solr的特性相关联。

  在编辑器中,最好是支持XML标记醒目显示的编辑器,打开位于

展开阅读全文
相关搜索
资源标签

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2