Solr 学习笔记

Solr 学习笔记
Solr 学习笔记

Solr笔记

Solr 是一种可供企业使用的、基于Lucene 的搜索服务器,它支持层面搜索、命中醒目显示和多种输出格式。在这篇分两部分的文章中,Lucene Java? 的提交人Grant Ingersoll 将介绍Solr 并向您展示如何轻松地将其表现优异的全文本搜索功能加入到Web 应用程序中。

一旦用户需要某种信息,就可以立即搜索到这些信息,这种要求再也不是可有可无的了。随着Go ogle 和类似的复杂搜索引擎的出现,用户希望得到高质量的搜索结果,帮助他们快速、轻易地找到所需的信息。经理对您的在线购物站点同样抱有很高的期望,要求它能够提供一个可伸缩、高度可用且易于维护的搜索解决方案,并且安装这个解决方案不应太昂贵。对于您而言,只是希望事业进步,让老板和客户满意,以及保持头脑清醒。

使用Apache Solr 可以满足所有的这些要求,它是一种开放源码的、基于Lucene Java 的搜索服务器,易于加入到Web 应用程序中。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON 格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。您可以坚持使用Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。Solr 还拥有一个活跃的开发者群体,如有需要,您可以随时向他们寻求帮助。

Solr 的历史

Solr 最初由CNET Networks 开发,2006 年初,Apache Software Foundation 在Lucene 顶级项目的支持下得到了Solr。Solr 于2007 年 1 月酝酿成熟,在整个项目孵化期间,Solr 稳步地积累各种特性并吸引了一个稳定的用户群体、贡献者和提交人。Solr 现在是Lucene(Apache 的基于J ava 的全文本搜索引擎库)的一个子项目。

安装和配置

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

Java 1.5 或更高版本。

Ant 1.6.x 或更高版本。

Web 浏览器,用来查看管理页面。建议使用Firefox;相比之下使用Internet Explorer 可能要复杂些。

servlet 容器,如Tomcat 5.5。本文中的示例假定您的Tomcat 在8080 端口上运行,这是Tom cat 的默认设置。如果运行的是其他servlet 容器或在其他的端口上运行,则可能要修改给出的URL 才能访问示例应用程序和Solr。我已经假定示例应用程序的各个部分都运行在Tomcat 的本地主机上。另外还要注意Solr 以打包的方式与Jetty 一起提供。

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

设置Solr

一旦搭建好运行环境,就可以从Apache Mirrors Web 站点下载Solr 1.1 版。接下来,执行以下操作:

停止servlet 容器。

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

输入cd dw-solr。

将Solr 下载版本复制到当前目录中并解压缩。即可得到apache-solr-1.1.0-incubating 目录。不用注意incubating 标记;Solr 早已孵化成熟。

将Solr WAR 文件复制到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 目录中,方法与复制Solr WAR 文件相同。WAR 文件的Java 的代码位于dw-solr/solr/src/java 中,而JSP 和其他Web 文件位于dw-solr/solr/src/webapp 中。

要验证所有程序都正常运行,请启动servlet 容器并将浏览器指向http://localhost:8080/solr/admi n/。如果一切顺利,您应该看到类似图1 所示的页面。如果没有出现管理页面,查看容器日志中的错误消息。另外,确保从dw-solr 目录启动servlet 容器,以便可以正确地设置Solr 的主位置。

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

关于Lucene

要了解Solr 就必须熟悉Lucene。Lucene 是一个基于Java 的高性能文本搜索引擎库,最初由Doug Cutting 编写,后来被捐赠给Apache Software Foundation。很多应用程序都利用Lucene 来增强自身的搜索功能,因为Lucene 高速、易用和具有活跃社区的特点。Solr 构建在这些功能之上,使Lucene 可供企业使用,并具有最小的编程需求。

Solr 基础

因为Solr 包装并扩展了Lucene,所以它们使用很多相同的术语。更重要的是,Solr 创建的索引与Lucene 搜索引擎库完全兼容。通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr

可以阅读和使用构建到其他Lucene 应用程序中的索引。此外,很多Lucene 工具(如Luke)也可以使用Solr 创建的索引。

在Solr 和Lucene 中,使用一个或多个Document 来构建索引。Document 包括一个或多个Fi eld。Field 包括名称、内容以及告诉Solr 如何处理内容的元数据。例如,Field 可以包含字符串、数字、布尔值或者日期,也可以包含您想添加的任何类型。Field 可以使用大量的选项来描述,这些选项告诉Solr 在索引和搜索期间如何处理内容。我将在本文中稍后详细讨论这些选项。现在,查看一下表1 中列出的重要属性的子集:

表 1. 字段属性

属性

名称

说明

index ed

Indexed Field 可以进行搜索和排序。您还可以在indexed Field 上运行Solr 分析过程,此过程可修改内容以改进或更改结果。下一节提供了关于Solr 的分析过程的更多信息。

store d

stored Field 内容保存在索引中。这对于检索和醒目显示内容很有用,但对于实际搜索则不是必需的。例如,很多应用程序存储指向内容位置的指针而不是存储实际的文件内容。

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” 描述的那样),则您可以看到一个题为“Sample Solr Blog Search” 的简单用户界面,在标题的正下方有一些菜单项。当您浏览本文的两个部分时,将会了解到菜单中的所有主题。

索引操作

在Solr 中,通过向部署在servlet 容器中的Solr Web 应用程序发送HTTP 请求来启动索引和搜索。Solr 接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。通过HTTP 以同样的方式返回响应。默认配置返回Solr 的标准XML 响应。您也可以配置Solr 的备用响应格式。我将在本文的第2 部分向您展示如何定制请求和响应处理。

索引就是接受输入(本例中是博客条目、关键字和其他元数据)并将它们传递给Solr,从而在HT TP Post XML 消息中进行索引的过程。您可以向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. Solr add 命令样例

http://localhost/myBolg/solr-rocks.html

Solr Search is Simply Great

solr,lucene,enterprise,search

2007-01-06T05:04:00.000Z

10

Solr is a readlly great open source search server.It scales,I t’s easy to configure and the Solr community is really supportive.

on

清单1 的 中的每个field 条目告诉Solr 应该将哪些Field 添加到所创建文档的Lucene 索引中。可以向add 命令添加多个。稍后我将解释Solr 如何处理这些field。现在,知道包含清单 1 中指定的七个field 的文档将会被索引就足够了。

当您在“Solr XML Command” 页面提交命令时,结果将发往Solr 进行处理。HTTP POST 将命令发往在http://localhost:8080/solr/update 运行的Solr Update Servlet。如果一切进展顺利,则会随 返回一个XML 文档。Solr 使用相同的URL 自动更新文档(示例应用程序中的URL 是Solr 识别文档以前是否被添加过所使用的惟一id)。

实践索引

现在再添加几个文档并提交这些文档,以便在下一节中有文档可供搜索。一旦您熟悉add 命令的语法后,就可以取消选择Index 按钮旁边的“Display XML...” 复选框,跳过“Solr XML Command” 页面。本文附带的样例文件包含了一个很多这些示例中使用的索引版本。

您可以通过在http://localhost:8080/dw/delete.jsp 页面输入文档的URL、提交并查看命令,然后将命令提交到Solr 来删除文档。有关索引和删除命令的更多信息,请参阅参考资料中的“Solr Wiki”参考。

搜索命令

添加文档后,就可以搜索这些文档了。Solr 接受HTTP GET 和HTTP POST 查询消息。收到的查询由相应的SolrRequestHandler 进行处理。出于本文的讨论目的,我们将使用默认的StandardRe questHandler。在本文的第2 部分,我将向您展示如何为其他的SolrRequestHandler 配置Solr。

要查看搜索运行,返回到示例应用程序并浏览到http://localhost:8080/dw/searching.jsp。此屏幕应该与索引屏幕非常类似,只是增加了几个搜索相关的选项。与索引类似,可以向各种输入字段中输入值,选择搜索参数并将查询提交给示例应用程序。示例应用程序醒目显示了一些Solr 中更常见的查询参数。这些参数如下所示:

关于查询语法的一点注意

用于StandardRequestHandler 的Solr 查询语法与Lucene QueryParser 支持的查询语法相同,只是前者加入了一些排序支持。示例应用程序对输入的值几乎没有进行验证,而且没有演示如查询增强、短语、范围筛选等功能,所有这些功能在Solr 和Lucene 中都有效。有关Lucene QueryPars er 的更多信息,请参阅参考资料。在本文的第2 部分,我将介绍管理界面中的一些有助于调试查询语法和结果的工具。

布尔运算符:默认情况下,用于合并搜索条目的布尔运算符是OR。将它设为AND 要求匹配的文档中出现所有的条目。

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

开始:结果集中开始的偏移量。此参数可用于分页。

醒目显示:醒目显示匹配文档字段的条目。参考清单 2 底部的 节点。醒目显示的条目标记为

一旦输入和提交值后,博客应用程序就返回一个可以立即提交给Solr 的查询字符串。提交字符串后,如果一切正常并且存在匹配文档,则Solr 返回一个XML 响应,其中包含了结果、醒目显示的信息和一些有关查询的元数据。清单2 给出了一个示例搜索结果:

清单2. 搜索结果示例

0

6

10

0

*,score

true

content:”faceted bowsing”

1.058217

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

Solr is Great

solr,lucene,enterprise,search,greatness

Solr has some really great features,like faceted browsing and replication

Solr has some really great features,like faceted browsing and replication

2007-01-07T05:04:00.000Z

solr,lucene,enterprise,search,greatness

Solr is Great

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

Solr has some really great features,like faceted

browsingand replication

<./lst>

.

一条查询消息可以包含大量的参数,表2 中对醒目显示的那些参数进行了描述。参阅参考资料中的“Solr Wiki” 参考可以查看参数的完整清单。

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

参数描述示例

q

Solr 中用来搜索的查询。有关该语法的完整描述,请参阅参考资料

中的“Lucene QueryParser Syntax”。可以通过追加一个分号和已索引

且未进行断词的字段(下面会进行解释)的名称来包含排序信息。默认

的排序是score desc,指按记分降序排序。

q=myField:Java AND otherField:developer

Works; date asc

此查询搜索指定的两个字段并根

据一个日期字段对结果进行排序。

start 将初始偏移量指定到结果集中。可用于对结果进行分页。默认值为0。start=15

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

rows 返回文档的最大数目。默认值为10。rows=25

fq

提供一个可选的筛选器查询。查询结果被限制为仅搜索筛选器查询返回

的结果。筛选过的查询由Solr 进行缓存。它们对提高复杂查询的速度

非常有用。

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

息除外。

hl

当hl=true 时,在查询响应中醒目显示片段。默认为 false。参看醒目

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

hl=true

fl

作为逗号分隔的列表指定文档结果中应返回的Field 集。默认为“*”,

指所有的字段。“score” 指还应返回记分。

*,score

层面浏览

最近,似乎所有流行的购物站点都添加了便利的条件列表,帮助用户根据制造商、价格和作者缩小搜索结果的范围。这些列表是层面浏览的结果,层面浏览是一种分类方式,用于对已经返回到有意义的、已证实存在的种类的结果进行分类。层面用于帮助用户缩小搜索结果的范围。

通过浏览到http://localhost:8080/dw/facets.jsp 可以查看层面的运行。在这个页面上,您需要关注两种输入形式:

一个文本区域,您可以在其中输入查询,根据索引中的all 字段发布此查询。将all 字段看作一连串已索引的所有其他字段。(稍后将对此作详细介绍。)

一个可以用于分层面的字段下拉列表。此处并未列出所有的已索引字段,其原因马上就会得到解释。

输入一个查询并从下拉列表中选择一个层面字段,然后单击Submit 与生成的查询一起传递给Sol r。博客应用程序解析结果并返回类似图2 中的结果:

图 2. 层面浏览结果示例

在图2 中,您可以在顶部看见所有非零值的层面计数,底部则是匹配所提交查询的两个搜索结果。单击示例中的层面链接提交原始查询,另外将Facet 关键字作为一个新关键字。如果原始查询是q=S olr 而层面字段是keywords,并且单击图2 中的replication 链接,则新查询将会是q=Solr AND ke ywords:replication。

运行层面不需要打开它或在Solr 中进行配置,但是可能需要按照新的方式对应用程序内容进行索引。在已索引的字段中完成分层,层面对未进行断词的非小写词最为有效。(因此我并未包含content 字段或Facet Field 下拉列表中添加到文档的其他字段。)Facet 字段通常不需要存储,因为分层面的总体思想就是显示人类可读的值。

另外还要注意Solr 没有在层面中创建类别;必须由应用程序自身在索引期间进行添加,正如在索引应用程序时给文档指派关键字一样。如果存在层面字段,Solr 就提供了查明这些层面及其计数的逻辑。

Solr 模式

迄今为止,我已向您介绍了Solr 的特性,但没有实际解释如何配置这些特性。本文的剩余部分主要介绍配置,首先介绍Solr 模式(schema.xml)然后向您展示它如何与Solr 的特性相关联。

在编辑器中,最好是支持XML 标记醒目显示的编辑器,打开位于/dw-solr/solr/ conf 中的schema.xml 文件。首先要注意的是大量的注释。如果您以前使用过开放源码的软件,您将会为模式文件中的文档及整个Solr 中的文档欣喜不已。因为schema.xml 的注释非常全面,所以我主要介绍文件的一些关键属性,具体细节可查阅文档。首先,注意 标记中模式(dw-solr)的名称。Solr 为每个部署支持一个模式。将来它可能支持多个模式,但是目前只允许使用一个模式。(参阅参考资料中的“Solr Wiki” 参考,了解如何简单地配置Tomcat 和其他容器,以便为每个容器使用多个部署。)

模式可以组织为三部分:

类型

字段

其他声明

部分是一些常见的可重用定义,定义了Solr(和Lucene)如何处理Field。在示例模式中,有13 个字段类型,按名称从string 到text。 部分顶部声明的字段类型(如sint 和bo olean)用于存储Solr 中的原始类型。在很大程度上,Lucene 只处理字符串,因此需要对整型、浮点型、日期型和双精度型进行特殊处理才能用于搜索。使用这些字段类型会警告Solr 使用适当的特殊处理索引内容,不需要人为干涉。

类型

本文前面的内容中,我简要介绍了Solr 的分析过程的基础。仔细观察一下text 字段类型声明,您可以看见Solr 管理分析的细节。清单3 给出了text 字段类型声明:

清单 3. 文本字段类型声明

ignoreCase=”true”words=”stopwords.txt”/>

generateNumbers=”1”catenateWords=”1”catenateNumberParts=”1”catennateWords=”1”catenate Numbers=”1”catenateAll=”0”/>

.

类属性

在Solr 模式中的很多实例中,类属性简化为类似solr.TextField 的样子。这是org.apache.solr.s chema.TextField 的简略表达形式。在本文的第2 部分中您将看到,类路径中扩展org.apache.solr.sc hema.FieldType 类的任何有效类都可能使用到。

首先,注意我在清单3 中声明了两个不同的Analyzer。虽然Analyzer 对于索引和搜索并非完全相同,但是它们只是在查询分析期间的同义词添加方面有所差别。词干提取、停止词删除以及相似的操作都被应用于标记,然后才进行索引和搜索,导致使用相同类型的标记。接下来,注意我首先声明断词工具,然后声明使用的筛选器。示例应用程序的Solr 配置按以下步骤进行设置:根据空白进行断词,然后删除所有的公共词(StopFilterFactory)

使用破折号处理特殊的大小写、大小写转换等等。(WordDelimiterFilterFactory);将所有条目处理为小写(LowerCaseFilterFactory)

使用Porter Stemming 算法进行词干提取(EnglishPorterFilterFactory)

删除所有的副本(RemoveDuplicatesTokenFilterFactory)

示例分析加入了很多用于改进搜索结果的常见方法,但不应被看作分析文本的惟一方式。每个应用程序都可能有一些自己的分析需求,这个示例或者甚至是Solr 或Lucene 中的任何现有Analyzer 都可能没有涉及相应需求。请参阅参考资料中的“More Info On Solr Analysis”,了解关于分析的更多选项以及如何使用其他Analyzer 的信息。

字段

继续介绍模式的 部分,查看Solr 如何处理索引和搜索期间使用的8 个(实际上是7 个,外加一个all)字段。清单4 中重复了这些字段:

清单4. 博客应用程序的声明字段

理解字段类型后,您可以清晰地看见如何处理每个字段。例如,url 字段是一个经过索引、存储和未经分析的string 字段。同时,使用清单 3 中声明的Analyzer 来分析text 字段。all 字段如何处

理?all 字段是一个text 字段,如title 或content 一样,但是它包含了连接在一起的几个字段的内容,便于使用备用搜索机制(记住层面搜索使用的是all 字段)。

对于字段的属性,在表 1 中您已经了解了indexed 和stored 的意义。multiValued 属性是一个特殊的例子,指Document 可以拥有一个相同名称添加了多次的Field。比如在我们的示例中,可以多次添加keywords。omitNorms 属性告诉Solr(和Lucene)不要存储规范。省略规范对于节省不影响记分的Field 的内存非常有用,比如那些用于计算层面的字段。

在结束 部分之前,简要介绍一下字段声明下方的 声明。动态字段是一些特殊类型的字段,可以在任何时候将这些字段添加到任何文档中,由字段声明定义它们的属性。动态字段和普通字段之间的关键区别在于前者不需要在schema.xml 中提前声明名称。Solr 将名称声明中的glob-like 模式应用到所有尚未声明的引入的字段名称,并根据其 声明定义的语义来处理字段。例如, 指一个m yRating_i 字段被Solr 处理为sint,尽管并未将其声明为字段。这种处理比较方便,例如,当需要用户定义待搜索内容的时候。

其他声明

最后,schema.xml 文件的最后部分包含了字段和查询相关的各种声明。最重要的声明是url。该声明用于告诉Solr 先前声明的url 字段是用于确定何时添加或更新文档的惟一标识符。defaultSearchField 是查询条目没有前缀任何字段时Solr 在查询中使用的Field。示例所使用的查询与q=title:Solr 类似。如果您输入q=Solr,则应用默认搜索字段。最终结果与q=all:Solr 相同,因为all 是博客应用程序中的默认搜索字段。

机制让您能够创建all 字段而无需将文档的所有内容手工添加到单独的字段。复制字段是以多种方式索引相同内容的简便方法。例如,如果您希望提供区分大小写的精确匹配和忽略大小写的匹配,则可以使用一个复制字段自动分析收到的内容。然后严格按照收到的内容进行索引(所有的字母使用小写)。

下一步:用于企业的Solr

目前为止,您已经安装了Solr 并学习了如何使用它在示例应用程序中索引和搜索文档。您也了解了Solr 中层面浏览如何工作,并学习了如何使用Solr 的schema.xml 文件声明索引结构。本文附带的示例应用程序演示了这些功能和介绍了如何为Solr 格式化命令。

在文章的第2 部分,我将会介绍一些特性,它们将Solr 从一个简单的搜索界面扩展成一个可供企业使用的搜索解决方案。您将学习Solr 的管理界面和高级配置选项,以及性能相关的特性(如缓存、复制和日志记录)。我还将简要讨论扩展Solr 以满足企业需求的一些方法。同时,充分利用示例应用程序,帮助自己熟悉Solr 的基本功能。

配置和管理

本部分介绍了可用于监视和控制Solr 功能性的诸多选项,首先来看看Solr 的Administration St art Page,该页可在http://localhost:8080/solr/admin/ 找到。一旦找到了起始页,在继续之前,请务必花些时间熟悉一下上面的各种菜单选项。在起始页中,根据这些选项所提供的信息的不同对它们进行了分组:

Solr 给出了有关这种活动模式(请参见第 1 部分)、配置以及当前部署的统计数据的详细信息。

App server 给出了容器的当前状态,包括threading 信息以及所有Java 系统属性的列表。

Make a Query 提供了调试查询所需的快捷界面以及到功能更加全面的查询界面的链接。

Assistance 提供了到外部资源的有用链接以便理解和解决使用Solv 可能遇到的一些问题。

如下的章节详细介绍了这些菜单选项并重点突出了其中的管理特性。

要使用Solr 的配置选项,可以单击初始页上的CONFIG 链接,这会显示当前的solrconfig.xml 文件。您可以在示例应用程序的dw-solr/solr/conf 目录找到该文件。现在,让我们先来看看与索引和查询处理有关的一些常见的配置选项,而与缓存、复制和扩展Solr 有关的配置选项则留到后面的章节再介绍。

索引配置

mainIndex 标记段定义了控制Solr 索引处理的低水平的Lucene 因素。Lucene 基准发布(位于Lucene 源代码的contrib/benchmark 之下)包含了很多可用来对这些因素的更改效果进行基准测试的

工具。此外,请参阅参考资料一节中的“Solr 性能因素” 来了解与各种更改相关的性能权衡。表1 概括了可控制Solr 索引处理的各种因素:

表 1. 对性能因素进行索引

因素描述

useCompou ndFile

通过将很多Lucene 内部文件整合到单一一个文件来减少使用中的文件的数量。这可有助于减少Solr 使用的文件句柄数目,代价是降低了性能。除非是应用程序用完了文件句柄,否则false 的默认值应该就已经足够。(设置为混合索引格式)writer.setUseCompoundFile();

mergeFacto r

决定低水平的Lucene 段被合并的频率。较小的值(最小为 2)使用的内存较少但导致的索引时间也更慢。较大的值可使索引时间变快但会牺牲较多的内存。

maxBuffere dDocs

在合并内存中文档和创建新段之前,定义所需索引的最小文档数。段是用来存储索引信息的Lucene 文件。较大的值可使索引时间变快但会牺牲较多的内存。

maxMergeD

ocs

控制可由Solr 合并的Document 的最大数。较小的值(< 10,000) 最适合于具有大量更新的应用程序。

maxFieldLen gth

对于给定的Document,控制可添加到Field 的最大条目数,进而截断该文档。如果文档可能会很大,就需要增加这个数值。然而,若将这个值设置得过高会导致内存不足错误。

unlockOnSt artup

unlockOnStartup 告知Solr 忽略在多线程环境中用来保护索引的锁定机制。在某些情况下,索引可能会由于不正确的关机或其他错误而一直处于锁定,这就妨碍了添加和更新。将其设置为true 可以禁用启动锁定,进而允许进行添加和更新。

查询处理配置

部分,有一些与缓存无关的特性,这一点您需要知道。首先, 标记定义了可组合在一起形成一个查询的子句数量的上限。对于大多数应用程序而言,默认的102 4 就应该已经足够;然而,如果应用程序大量使用了通配符或范围查询,增加这个限值将能避免当值超出时,抛出TooManyClausesException。

通配符和范围查询

通配符和范围查询是可自动扩展以包括所有可能匹配查询条件的条目的Lucene 查询。通配符查询允许使用* 和? 通配符运算符,而范围查询则要求匹配文档必须要在指定的范围之内。例如,若查找b*,可能导致潜在的数千个不同项都组合进这个查询,进而会导致TooManyClausesException。

接下来,若应用程序预期只会检索Document 上少数几个Field,那么可以将 属性设置为true。懒散加载的一个常见场景大都发生在应用程序返回和显示一系列搜索结果的时候,用户常常会单击其中的一个来查看存储在此索引中的原始文档。初始的显示常常只需要显示很短的一段信息。若考虑到检索大型Document 的代价,除非必需,否则就应该避免加载整个文档。

最后, 部分负责定义与在Solr 中发生的事件相关的几个选项。首先,作为一种介绍的方式,Solr(实际上是Lucene)使用称为Searcher 的Java 类来处理Query 实例。Searcher 将索引内容相关的数据加载到内存中。根据索引、CPU 以及可用内存的大小,这个过程可能需要较长的一段时间。要改进这一设计和显著提高性能,Solr 引入了一种“温暖” 策略,即把这些新的Searcher 联机以便为现场用户提供查询服务之前,先对它们进行“热身”。 部分中的 选项定义n ewSearcher 和firstSearcher 事件,您可以使用这些事件来指定实例化新搜索程序或第一个搜索程序时应该执行哪些查询。如果应用程序期望请求某些特定的查询,那么在创建新搜索程序或第一个搜索程序时就应该反注释这些部分并执行适当的查询。

solrconfig.xml 文件的剩余部分,除 之外,涵盖了与缓存、复制和扩展或定制Solr 有关的项目。admin 部分让您可以定制管理界面。有关配置admin 节的更多信息,请参看Solr Wiki 和solrconfig.xml 文件中的注释。

监视、记录和统计数据

在http://localhost:8080/solr/admin 的管理页,有几个菜单条目可以让Solr 管理员监视Solr 过程。表 2 给出了这些条目:

表 2. 用于监视、记录和统计数据的Solr 管理选项

菜单名Admin URL 描述

Statisti cs

http://localhost:8080/

solr/admin/stats.jsp

Statistics 管理页提供了与Solr 性能相关的很多有用的统计数据。这些数据包括:

关于何时加载索引以及索引中有多少文档的信息。

关于用来服务查询的SolrRequestHandler 的有用信息。

涵盖索引过程的数据,包括添加、删除、提交等的数量。

缓存实现和hit/miss/eviction 信息。

Info

http://localhost:8080/

solr/admin/registry.jsp

有关正在运行的Solr 的版本以及在当前实现中进行查询、更新和缓存所使用的类

的详细信息。此外,还包括文件存于Solr subversion 存储库的何处的信息以及对该

文件功能的一个简要描述。

Distrib ution

http://localhost:8080/

solr/admin/distribution

dump.jsp

显示与索引发布和复制有关的信息。更多信息,请参见“发布和复制” 一节。

Ping

http://localhost: 8080

/solr/admin/ping

向服务器发出ping 请求,包括在solrconfig.xml 文件的admin 部分定义的请求。

Loggin g

http:// localhost:8080

/solr/admin/logging.jsp

让您可以动态更改当前应用程序的日志记录等级。更改日志记录等级对于调试在执

行过程中可能出现的问题非常有用。

Java p ropertie s

http: //localhost:8080

/solr/admin/get-proper

ties.jsp

显示当前系统正在使用的所有Java 系统属性。Solr 支持通过命令行的系统属性替

换。有关实现此特性的更多信息,请参见solrconfig.xml 文件。

Threa d dum p

http://localhost:8080/

solr/admin/threaddum

p.jsp

thread dump 选项显示了在JVM 中运行的所有线程的堆栈跟踪信息。

调试此分析过程

经常地,当创建搜索实现时,您都会输入一个应该匹配特定文档的搜索,但它不会出现在结果中。在大多数情况下,故障都是由如下两个因素之一引起的:

查询分析和文档分析不匹配(虽然不推荐,但对文档的分析可能会与对查询的分析不同)。

Analyzer 正在修改不同于预期的一个或多个条目。

可以使用位于http://localhost:8080/solr/admin/analysis.jsp 的Solr 分析管理功能来深入调查这两个问题。Analysis 页可接受用于查询和文档的文本片段以及能确定文本该如何分析并返回正被修改的文本的逐步结果的Field 名称。图1 显示了分析句子“The Carolina Hurr icanes are the reigning St anley Cup champions, at least for a few more weeks” 以及相关的查询“Stanley Cup champion s” 的部分结果,正如为示例应用程序schema.xml 中指定的content Field 分析的那样:

图 1. 对分析进行调试

分析屏幕显示了每个条件在被上述表结果Tokenizer 或TokenFilter 处理后的结果。比如,StopF ilterFactory 会删除字The、are 和the。EnglishPorterFilterFactory 会将字champions 提取为cha mpion,将Hurricanes 提取为hurrican。紫色的醒目显示表明在特定文档中查询条件在何处有匹配。

查询测试

admin 页的Make a Query 部分提供了可输入查询并查看结果的搜索框。这个输入框接受第 1 部分中讨论到的Lucene 查询解析器语法,而Full Interface 链接则提供了对更多搜索特性的控制,比如返回的结果的数量、在结果集中应该包括哪些字段以及如何格式化输出。此外,该界面还可用来解释文档的计分以更好地理解哪些条件得到了匹配以及这些条件是如何得分的。要实现这一目的,可以查看Debug: enable 选项并滚动到搜索结果的底端来查看相关解释。

智能缓存

智能缓存是让Solr 得以成为引人瞩目的搜索服务器的一个关键性能特征。例如,Solr 在提供缓存服务之前可通过使用旧缓存中的信息来自热缓存,以便在服务于现有用户的同时改进性能。Solr 提供了四种不同的缓存类型,所有四种类型都可在solrconfig.xml 的 部分中配置。表3 根据在sol rconfig.xml 文件中所用的标记名列出了这些缓存类型:

表 3. Solr 缓存类型

缓存

标记

描述能否自热?

filter Cache

通过存储一个匹配给定查询的文档id 的无序集,过滤器让Solr 能够有效提高查询

的性能。缓存这些过滤器意味着对Solr 的重复调用可以导致结果集的快速查找。更常

见的场景是缓存一个过滤器,然后再发起后续的精炼查询,这种查询能使用过滤器来

限制要搜索的文档数。

可以

query

Result

Cache

为查询、排序条件和所请求文档的数量缓存文档id 的有序集合。可以

docu mentC ache

缓存Lucene Document,使用内部Lucene 文档id(以便不与Solr 惟一id 相混

淆)。由于Lucene 的内部Document id 可以因索引操作而更改,这种缓存不能自

热。

不可以

Name

d cac hes 命名缓存是用户定义的缓存,可被Solr 定制插件所使用。

可以,如果实现了org.

apache.solr.search.Cac

heRegenerator 的话。

每个缓存声明都接受最多四个属性:

class 是缓存实现的Java 名。

size 是最大的条目数。

initialSize 是缓存的初始大小。

autoWarmCount 是取自旧缓存以预热新缓存的条目数。如果条目很多,就意味着缓存的hit 会更多,只不过需要花更长的预热时间。

而对于所有缓存模式而言,在设置缓存参数时,都有必要在内存、CPU 和磁盘访问之间进行均衡。统计信息管理页对于分析缓存的hit-to-miss 比例以及微调缓存大小的统计数据都非常有用。而且,并非所有应用程序都会从缓存受益。实际上,一些应用程序反而会由于需要将某个永远也用不到的条目存储在缓存中这一额外步骤而受到影响。

发布和复制

对于收到大量查询的应用程序,单一一个Solr 服务器恐怕不足以满足性能上的需求。因而,Solr 提供了跨多个服务器复制Lucene 索引的机制,这些服务器必须是负载均衡的查询服务器的一部分。复

solr教程

Apache Solr 初级教程 (介绍、安装部署、Java接口、中文分词)Apache Solr 介绍 Solr 是什么? Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现。服务器通信使用标准的HTTP 和XML,所以如果使用Solr 了解Java 技术会有用却不是必须的要求。 Solr 主要特性有:强大的全文检索功能,高亮显示检索结果,动态集群,数据库接口和电子文档(Word ,PDF 等)的处理。而且Solr 具有高度的可扩展,支持分布搜索和索引的复制。 Lucene 是什么? Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。 目前已经有很多应用程序的搜索功能是基于 Lucene ,比如 Eclipse 帮助系统的搜索功能。Lucene 能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索。 Solr VS Lucene Solr 与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene ,因为Solr 底层的核心技术是使用Apache Lucene 来实现的,简单的说Solr 是Lucene 的服务器化。需要注意的是Solr 并不是简单的对Lucene 进行封装,它所提供的大部分功能都区别于Lucene 。 安装搭建Solr

安装Java 虚拟机 Solr 必须运行在Java1.5 或更高版本的Java 虚拟机中,运行标准Solr 服务只需要安装JRE 即可,但如果需要扩展功能或编译源码则需要下载JDK 来完成。可以通过下面的地址下载所需JDK 或JRE : ?OpenJDK (https://www.360docs.net/doc/f215939338.html,/j2se/downloads.html) ?Sun (https://www.360docs.net/doc/f215939338.html,/j2se/downloads.html) ?IBM (https://www.360docs.net/doc/f215939338.html,/developerworks/java/jdk/) ?Oracle (https://www.360docs.net/doc/f215939338.html,/technology/products/jrockit/index.html)安装步骤请参考相应的帮助文档。 安装中间件 Solr 可以运行在任何Java 中间件中,下面将以开源Apache Tomcat 为例讲解Solr 的安装、配置与基本使用。本文使用Tomcat5.5 解压版进行演示,可在下面地址下载最新版本https://www.360docs.net/doc/f215939338.html,/download-55.cgi 安装Apache Solr 下载最新的Solr 本文发布时Solr1.4 为最新的版本,下文介绍内容均针对该版本,如与Solr 最新版本有出入请以官方网站内容为准。Solr官方网站下载地址: https://www.360docs.net/doc/f215939338.html,/dyn/closer.cgi/lucene/solr/ Solr 程序包的目录结构 ?build :在solr 构建过程中放置已编译文件的目录。 ?client :包含了一些特定语言调用Solr 的API 客户端程序,目前只有Ruby 可供选择,Java 客户端叫SolrJ 在src/solrj 中可以找到。 ?dist :存放Solr 构建完成的JAR 文件、WAR 文件和Solr 依赖的JAR 文件。 ?example :是一个安装好的Jetty 中间件,其中包括一些样本数据和Solr 的配置信息。 o example/etc :Jetty 的配置文件。 o example/multicore :当安装Slor multicore 时,用来放置多个Solr 主目录。 o example/solr :默认安装时一个Solr 的主目录。 o example/webapps :Solr 的WAR 文件部署在这里。

拓薪教育-solr教程

全文检索技术Solr 讲师:任亮

1课程计划 1、站内搜索技术的选型 2、什么是Solr 3、Solr的安装及配置,solr整合tomcat。 4、Solr对索引库的维护,基于solr的后台管理界面 a)增加文档 b)删除文档 c)修改文档 5、Solr查询索引,基于solr的后台管理界面 6、Solr的客户端SolrJ a)索引的维护 b)索引的查询 7、综合案例,电商网站的搜索功能 2站内搜索技术的选型 1、Lucene实现站内搜索。开发工作量大,还要对索引库的维护投入大量的工作,索引的优化查询的优化,大并发量的考虑。不推荐使用。 2、可以使用搜索搜索引擎提供站内搜索功能。索引库放在搜索引擎上,不能维护。优点就非常简单。 3、solr技术,solr是基于lucene开发的一个全文检索服务器,提供了全套的全文检索解决方案。推荐使用的技术。 3什么solr 3.1 Solr的概念 Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用POST 方法向Solr 服务器发送一个描述Field 及其内容的XML 文档,Solr 根据xml文档添加、删除、更新索引。Solr 搜索只需要发送HTTP GET 请求,然后对Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

solr技术方案

Solr技术方案 一用户需求 以前的互动平台只能对固定表的固定字段做like这样的数据库层面的索引,性能低下,用户体验很差,很难满足业务提出的简化搜索的需求。 需求原型: 业界通用的做全站搜索的基本上两种: 1 选择googleAPI,百度API做。同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,而且全站的SEO做的也不是很好,对于动态的很多ajax请求需要做快照,所以暂时不采用。 2 选择现有成熟的框架。

这里我们选择使用solr。 Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON 格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与Lucene 搜索引擎库完全兼容。通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他Lucene 应用程序中的索引。此外,很多Lucene 工具(如Nutch、Luke)也可以使用Solr 创建的索引。 这里我们主要需要以下几种功能: 1 可用性及成熟性。 2 中文分词。 3 词库与同义词的管理(比如我们使用最高的:股票代码)。 4 高亮显示。 5 方便的导入数据。 6 Facet的轻松配置 7 扩展性。 二Solr的体系结构 体系结构 Solr体系,功能模块介绍及配置。

以上是solr的架构图。具体应用时需要理解一下模块的作用及配置。 RequestHandler:接受请求,分发请求。另外也包含导入数据,如importhandler。UpdateHandlers –处理索引请求。 Search Components:作为handlder的成员变量。处理请求。 Facet:分类搜索 Tika:apache下处理文件的一个项目。 Filter,spelling :处理字符串 Http query/update Database/html importhandler 默认基本可以满足要求。如果不够则扩展相应的handler和component。

轻松使用SaltStack管理成千上万台服务器(入门教程)

目录树引言:一个”非专职运维人员“的烦恼 Salt快速入门 1. 安装配置 2. 安装管理端(master) 3. 安装被管理端(minion) 4. 接受minion的托管请求 5. 测试 Salt的强大功能 1. 批量操作(targeting) 2. 节点分组(nodegroups) 3. 命令执行(execution) 4. 节点信息(grains) 5. 配置管理(state) 6. 小结 Salt state实例解析 1. 目录结构 2. apache/init.sls 3. ssh/init.sls 4. ssh/server.sls 5. ssh/custom-server.sls 引言:一个”非专职运维人员“的烦恼加入到某证券公司的IT部门,尽管所在的部门挂了一个“研发部”的名字,但是我发现有大概40%的时间是在做运维工作。

这来自两种情况: 1. 自主开发的应用,需要持续的改进,不断的更新、发布、部署、调整配置,这不是运维部门喜欢的状态。 2. 软件商提供的“产品”无法满足运维部门的要求:无法通过简单的 Q&A 文档保证系统的正常运行,经常需要有一定技术能力的人员解决系统运行过程中各种稀奇古怪的问题。 这种情况下只能自己做一个“非专职运维人员”,需要频繁的登录各种服务器,执行一些命令来查看状态或者更改配置(包括配置文件的变更和软件包的安装部署)。很多操作都是不断的重复,日复一日,让人厌烦。 ”重复的工作应该交给程序去做“,所以我自己写过一些脚本。为了避免将脚本上传到几十台服务器并且不时进行更改,我使用Fabric来进行服务器的批量操作。 尽管避免了”批量的人工操作“,但我还是在进行”人工的批量操作“。远远没有实现自动管理。将有限的生命解放出来,投入到更有意义的编码工作是一个奔四程序员应有的追求,所以我又睁大红肿的眼睛,迷茫的搜索这个世界。 我发现了Puppet,Chef和CFEngine,但是并不满意。直到我发现了Salt,我的眼前一亮:这正是我所需要的东西。 如果说Salt有什么独特之处打动了我,那就是: 简单:可能是源于python的简约精神,Salt的安装配置和使用简单到了令人发 指的地步。任何稍有经验的linux使用者可以在10分钟之内搭建一个测试环境并跑通一个例子(相比之下,puppet可能需要30--60分钟)。 高性能:Salt使用大名鼎鼎的ZeroMQ作为通讯协议,性能极高。可以在数秒钟之内完成数据的传递 可伸缩:基于ZeroMQ通信,具备很强的扩展性;可以进行分级管理,能够管理分布在广域网的上万台服务器。 尽管twitter、豆瓣、oracle、等著名网站的运维团队都在使用puppet,但是我相信,他们切换到salt只是一个时间问题。毕竟不是所有的人都喜欢操纵傀儡(puppet),但是谁又能离开盐(salt)呢? 关于Salt和Puppet的对比,可以参考这里,或者看看中文版。

zheng-环境搭建及系统部署文档20170213(三版)

1Een 项目描述 基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构:内容管理系统(门户、博客、论坛、问答等)、统一支付中心(微信、支付宝、在线网银等)、用户权限管理系统(RBAC细粒度用户权限、统一后台、单点登录、会话管理)、微信管理系统、第三方登录系统、会员系统、存储系统 https://www.360docs.net/doc/f215939338.html,/zhengAdmin/src/ 2项目组织结构

3项目模块图 4项目使用到的技术4.1后端技术 Spring Framework SpringMVC: MVC框架

Spring secutity|Shiro: 安全框架 Spring session: 分布式Session管理MyBatis: ORM框架 MyBatis Generator: 代码生成 Druid: 数据库连接池 Jsp|Velocity|Thymeleaf: 模板引擎ZooKeeper: 协调服务 Dubbo: 分布式服务框架 TBSchedule|elastic-job: 分布式调度框架Redis: 分布式缓存数据库 Quartz: 作业调度框架 Ehcache: 缓存框架 ActiveMQ: 消息队列 Solr|Elasticsearch: 分布式全文搜索引擎FastDFS: 分布式文件系统 Log4J: 日志管理 Swagger2: 接口文档 sequence: 分布式高效ID生产 https://www.360docs.net/doc/f215939338.html,/yu120/sequence AliOSS|Qiniu: 云存储 Protobuf|json: 数据传输 Jenkins: 持续集成工具 Maven|Gradle: 项目构建管理

非常经典的solr教程

非常经典的solr教程,照着上面做完全能成功! duogemajia Solr 3.5 入门配置应用 机器上已安装: Tomcat 6.0 jdk1.7 mysql 5.0 1 访问https://www.360docs.net/doc/f215939338.html,/dyn/closer.cgi/lucene/solr , 在这个网址里选择一个路径, 下载solr 3.5 的版本 2 solr3.5 在本机解压缩以后, 把apache-solr-3.5.0\example\webapps 目录下 的solr.war 文件拷贝到Tomcat 6.0 的webapps 目录下 3 在Tomcat 6.0\webapps\solr 目录里新建一个文件夹conf 4 把solr3. 5 本机解压缩文件夹apache-solr-3.5.0\example 下的multicore 文件夹 考本到Tomcat 6.0\webapps\solr\conf 目录下 5 在Tomcat 6.0\conf\Catalina\localhost 目录下新建一个solr.xml 文件, 里面的内容如下 6 访问你的solr 项目localhost:8080/solr 会显示出两个core , solr 正常运行 7 配置分词, 使用的是mmseg4j 和搜狗词库, 下载地址: https://www.360docs.net/doc/f215939338.html,/p/mmseg4j/ , https://www.360docs.net/doc/f215939338.html,/p/mmseg4j/downloads/ detail?name=data.zip&can=2&q 8 把本地下载的mmseg4j 解压缩, 把里面的mmseg4j-all-1.8.5.jar 文件拷贝到Tomcat 6.0\webapps\solr\WEB-INF\lib 目录下 9 在Tomcat 6.0\webapps\solr 目录下新建一个dic 文件夹, 把新下载的词库拷贝到dic 目录下 10 在\Tomcat 6.0\webapps\solr\conf\multicore\core0\conf\schema.xml 文件的types 节点里添加如下节点:

SolrCloud使用教程、原理介绍 我心动了

SolrCloud使用教程、原理介绍 发布于2013 年 8 月 24 日,属于搜索分类,7,446 浏览数 SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,是正在开发中的 Solr4.0 的核心组件之一,它的主要思想是使用 Zookeeper 作为集群的配置信息中心。 它有几个特色功能:①集中式的配置信息②自动容错③近实时搜索④查询时自动负载均衡。

下面看看 wiki 的文档: 1、SolrCloud SolrCloud 是指 Solr 中一套新的潜在的分发能力。这种能力能够通过参数让你建立起一个高可用、 容错的 Solr 服务集群。当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud(solr 云)。 看看下面“启动”部分内容,快速的学会怎样启动一个集群。后面有 3 个快速简单的例子, 它们展现怎样启动一个逐步越来越复杂的集群。检出例子之后,需要翻阅后面的部分了解 更加细节的信息。 2、关于 SolrCores 和 Collections 的一点儿东西 对于单独运行的 Solr 实例,它有个东西叫 SolrCore(Solr.xml 中配置的),它是本质上独立的 索引块。如果你打算多个索引块,你就创建多个 SolrCores。当同时部署SolrCloud 的时, 独立的索引块可以跨越多个 Solr 实例。这意味着一个单独的索引块能由不同服务器设备上多个 SolrCore 的索引块组成。我们把组成一个逻辑索引块的所有 SolrCores 叫做一个独立 索引块儿(collection)。一个独立索引块是本质上一个独立的跨越多个 SolrCore 索引块的索 引块,同时索引块尽可能随着多余的设备进行缩放。如果你想把你的两个 SolrCore Solr 建 立成 SolrCloud,你将有 2 个独立索引块,每个有多个独立里的 SolrCores 组成。 3、启动 下载 Solr4-Beta 或更高版本。 如果你还没了解,通过简单的Solr 指南让自己熟悉Solr。注意:在通过指南了解云特点前,重设所有的配置和移除指南的文档.复制带有预先存在的 Solr 索引的例子目录将导致文档计数关闭Solr 内嵌使用了Zookeeper 作为集群配置和协调运作的仓储。协调考虑作为一个包 含所有 Solr 服务信息的分布式文件系统。 如果你想用一个其他的而不是 8983 作为 Solr 端口,去看下面’ Parameter Reference’部分下 的关于solr.xml 注解 例 A:简单的 2 个 shard 集群 这个例子简单的创建了一个代表一个独立索引块的两个不同的 shards 的两个 solr 服务组成

基于solr的异构数据融合检索技术_梁艳

基于solr的异构数据融合检索技术 梁 艳1 刘双广1 劳定雄2 (1.重庆邮电大学通信与信息工程学院,重庆 400065;2.高新兴科技集团股份有限公司研发中心,广东 广州 510530) 摘 要:针对企业异构数据融合检索的需求,介绍了异构数据整合的常用方法和企业级搜索服务器solr的基本功能,结合xml异构数据整合、中文分词技术和友好的用户界面搭建了基于solr的异构数据融合检索系统,实现了对xml文件的索引和检索,为异构数据融合检索提供了解决方案。 关键词:solr;异构数据;XML;融合;检索 The Retrieval Technology of Heterogeneous Data Integration Based on Solr Abstract:For the need of enterprise heterogeneous data integration retrieval, this thesis introduces the common method of heterogeneous data integration and the basic function of Solr which is enterprise search server. Combined the XML heterogeneous data integration with the Chinese word segmentation technology and the friendly user interface,this paper built the heterogeneous data integration retrieval system based on Solr, realized the indexing and retrieval of XML document and provided solutions for heterogeneous data integration retrieval. Key words:solr; Heterogeneous data;xml;integration;retrieval 作者简介: 梁艳(1988-),女,汉族,重庆市潼南县人,重庆邮电大学硕士在读,研究方向:信息检索;刘双广(1965-),男,汉族,广东省广州人,重庆邮电大学硕士生导师,EMBA,研究方向:物联网;劳定熊(1976-),汉族,男,广东省广州人,高新兴科技集团股份有限公司架构师,硕士,研究方向:云计算。 1 背景 互联网技术的发展,使得信息数据爆炸式增长。特别是在企业信息中,其非结构数据占到了增长数据的80%,包括PDF、word文档,图像、音频和视频等。企业在不同的应用平台拥有不同的检索系统,这给用户检索信息带来了诸多不便。如何构建一个统一的检索平台,使得用户在海量的异构数据中实现统一检索,一直是研究人员研究的热点。 2 异构数据融合技术 异构数据是指数据格式不同,内容不一,描述不同内容的数据,包括结构化数据(如数据库)、半结构化数据(如HTML、 XML)和非结构化数据(如文本、图片)[1] 。数据的统一访问的基 础在于数据融合集成,目前对于解决异构数据融合的研究有数据仓库、数据抽取和数据转换。 数据仓库是指不同来源的数据在进入数据仓库之前,转换为统一的格式为复杂的查询提供统一的视图,实现数据的统一访问[2]。其代表性的成果是ETL集成工具,ETL [3]允许提取、转换和加载异构数据到数据仓库中和实现数据迁移任务。但数据仓库主要是针对不同数据库中的结构化数据的整合,很难应用于非结构化数据的集成、实现非结构化数据的统一访问[4]。 数据抽取是指将无结构的的文本结构化处理,即输入原始文本输出固定格式[5]。部分数据库管理系统自带有数据抽取工具,能够低成本的解决异构数据整合问题,但在实际应用中有一定的局限性。 XML整合是数据转换技术的代表,即将各种异构数据转换为统一的xml文本格式,实现异构数据整合。XML(eXtensible Markup Language,扩展标记语言)是互联网下的一个关键技术,它能很好地实现来源极端异构的数据描述和传输。XML能独立于应用系统,不受任何特殊的软件或者硬件平台限制,并且这些数据能重复使用,简单易懂,成为交换各种结构化、半结构化、非结构化信息的良好方式[6]。因此,采用XML文档作为底层数据的融合与集成技术,实现了异构数据源间数据共享并且更有效地利用信息资源。XML整合数据的一般模型为下图一所示: 3 solr搜索引擎 3.1 solr简介 Solr (Searching on Lucene Replication)[7] 是Apache 软件基金会下的一个开源子项目,它是一个高性能的、采用java5开发的、基于lucene全文搜索库的企业搜索服务器。提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。 3.2 solr体系架构 Solr的系统结构图[8]如图2所示,solr主要分为3层,solr 在lucene的基础上进行了大量的改进,其中solr的底层为对lucene一些功能的改进封装。中间层为solr的核心层,搜索引 擎的主要功能都是在这一层实现的,包括对文档进行分析、建立索引、配置solr运行文件和保存索引文件等。最顶层包括HTTP接口,负责通过HTTP传入和返回XML文档;管理界面和索引更新模块。另外,索引复制功能是一个独立的模块,它是由一个主索引和多个从索引构成,从索引从主索引复制索引,主索引负 图一 xml数据整合模型

美团O2O的CRM系统架构设计教程文件

美团O2O的CRM系统架构设计 众所周知,O2O(Online To Offline),是指将线下的商务机会与互联网结合,让互联网成为线下交易的前台。但是O2O平台自身并不提供用户最终享受的商品、服务,这些服务都来自线下商户提供的服务,换句话说平台只是服务的搬运工。 线上风景固然靓丽,但是并不像看到的那样风光,就拿“团购”来讲,美团、点评、百度糯米的APP在功能布局、操作体验等方面差异化越来越小,这样极大的降低了用户使用门槛,作为理性逐利的C端用户来讲,最长见的结果谁便宜就会用谁。那么问题来了,如何在这场纷争中抓住用户,最终胜出呢? 对,线下能力! 线下的能力包括线下资源的控制能力和线下服务品质的控 制能力。线下能力最终决定了平台能够提供给线上用户的服务和服务品质,只有能够提供丰富、实惠、高品质的服务,来能够帮助平台在线上赢得用户,取得成功。美团之所以成功,就在于强大的地面、运营团队所建立起的线下能力。而这些团队背后所依赖的,就是我们称之为秘密武器的B端产品。CRM,就是其中之一。CRMCRM系统,立足于帮助美团解决线下资源控制的能力。CRM通过商家关系的建立和维系客户

关系,同时借助于新技术、和方法改进来提升工作效率,从而达成链接美团和商户的使命! 接下来我会从两大维度四个方面来介绍一下美团CRM的特点:合作篇 销售(建立合作)、运营(持续合作) 效能篇 信息之战(数据)、移动办公(场景支持)销售(建立合作)众所周知,在CRM系统中线索是非常重要的资源,提供丰富、有价值的线索是CRM系统的首要职责。在美团,线索对象通常指商家门店(POI),通过对门店关键人物(KP)的拜访和机会转化,最终为美团提供合作商家(可上单的商家)。 线索通过多种渠道获得: 网上数据爬取(初期) BD(业务拓展人员)采集 商家创建 众包采集 美团数据中心(MDC)将信息收集完成后,POI将会进入审核环节,未经校准的POI会经由人工(运营审核、众包采集)、机器审核进行校准、去重工作,通过反向拉取、消息队列通知等方式,线索数据最终会同步到CRM。 基于美团的大数据服务,在CRM中的POI数据将会被标记分类(300大商家、头部商家、竞对在线、券、多、免)和信息

Solr总结-吐血总结

Solr调研总结 1. Solr 是什么? Solr它是一种开放源码的、基于Lucene Java 的搜索服务器,易于加入到Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。可以使用Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。Solr的特性包括: ?高级的全文搜索功能 ?专为高通量的网络流量进行的优化 ?基于开放接口(XML和HTTP)的标准 ?综合的HTML管理界面 ?可伸缩性-能够有效地复制到另外一个Solr搜索服务器 ?使用XML配置达到灵活性和适配性 ?可扩展的插件体系 2. Lucene 是什么? Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是Apache Jakarta(雅加达)家族中的一个开源项目。也是目前最为流行的基于Java开源全文检索工具包。目前已经有很多应用程序的搜索功能是基于Lucene ,比如Eclipse 帮助系统的搜索功能。Lucene能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索。

3. Solr vs Lucene Solr与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的,Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene 不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括Solr: Solr 是Lucene面向企业搜索应用的扩展。 Solr与Lucene架构图: Solr使用Lucene并且扩展了它! ?一个真正的拥有动态字段(Dynamic Field)和唯一键(Unique Key)的数据模式(Data Schema) ?对Lucene查询语言的强大扩展! ?支持对结果进行动态的分组和过滤 ?高级的,可配置的文本分析 ?高度可配置和可扩展的缓存机制 ?性能优化

solr使用手册

Solr全文检索服务 一、企业站内搜索技术选型 ?在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查 询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按 相关度排序、搜索内容格式不固定等,这里就需要使用全文检索技术实现搜索功能。 1.使用Lucene实现?什么是Lucene ? ?Lucene是一个基于Java的全文信息检索工具包,它不是一个完整 的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是Apache Jakarta(雅加达) 家族中的一个开源项目。也是目前 最为流行的基于Java开源全文检索工具包。目前已经有很多应用程 序的搜索功能是基于Lucene ,比如Eclipse 帮助系统的搜索功能。 Lucene能够为文本类型的数据建立索引,所以你只要把你要索引的 数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索 ●单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索 引维护、索引性能优化、搜索性能优化等,因此不建议采用。 2.使用Google或Baidu接口? ●通过第三方搜索引擎提供的接口实现站内搜索,这样和第三方引擎系统依 赖紧密,不方便扩展,不建议采用。 3.使用Solr实现? Solr是什么? ?Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于 Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语 言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 ?Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中, Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一 个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删 除、更新索引。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr

虚拟机学习云环境第二篇Hadoop和Hbase 部署

目标: 在本人的T450笔记本win7操作系统环境下熟悉云计算环境基于开源项目nutch实现大量文本内容的快速分词及检索. Hadoop、HBase、ZooKeep、Solr、Nutch 上一篇完成了Linux基础环境的搭建和集群内SSH无密码登录的设置 这一篇完成Hadoop软件安装 一、创建集群目录 mkdir -p /data/cluster cd /data/cluster mkdirtmp mkdir-p hdfs/data mkdir-p hdfs/name mkdir-p hdfs/journal 二、zookeep安装 在MNODE节点上执行: 把zookeeper-3.4.9.tar.gz拷贝到/data/cluster目录下 cd /data/cluster tarvzxf zookeeper-3.4.9.tar.gz cd /data/cluster/zookeeper-3.4.9/conf cpzoo_sample.cfgzoo.cfg 修改zoo.cfg,修改后内容如下: # The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/data/cluster/zookeeper-3.4.9/data # the port at which the clients will connect clientPort=2181 server.1=MNODE :2888:3888 server.2=SNODE :2888:3888 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60

Solr课件

solr入门 课程计划: 1、solr服务介绍 2、solr服务的安装 3、solrhome的目录结构 4、自定义索引库 5、将数据库数据导入索引库 6、solrj对索引库的维护 7、solr案例 1solr服务介绍 1.1什么是solr Solr is the popular, blazing-fast, open source enterprise search platform built on Apache Lucene?. Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene 的全文搜索服务。 Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。 Solr提供了比Lucene更为丰富的查询语言, 同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 1.2solr与Lucene区别 Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索应用。Lucene仅提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索应用。

Solr的目标是打造一款企业级的搜索引擎系统,它是基于Lucene一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。 2solr服务安装与运行 2.1下载 地址:https://www.360docs.net/doc/f215939338.html,/solr/ 2.2安装 解压solr-4.10.3后的目录结构: 2.3运行 执行example目录下的start.jar即可。 2.4访问 http://localhost:8983/solr/

人世间Solr为何物

人世间Solr为何物 下面的几张图熟悉吗? 图(1) 图(2) 图(3)

?高扩展的Java搜索服务器 ?基于Lucene搜索库 ?通过HTTP接收XML/JSON格式的文档(轻量级的"REST"形式) ?没有内建的索引蜘蛛,可以与Nutch等爬虫集成 ?使用Lucene文档解析器解析HTML, OpenOffice, Microsoft Word, Excel, PowerPoint, IMAP, RTF, PDF等格式的文件 ?不仅支持字段数据模式定义, 也支持Lucene 动态字段 ?自定义分词器(Tokenizer)、过滤器(Filter)、分析器(Analyzer)以便控制索引和查询进程

?除了支持富文本字段(rich text)和元数据(metadata)外,对数字和日期等进行了很好的区分 ?能合并多个文本字段为一个全文类型(full text)的字段,方便搜索(copy field) ?可以基于性能的考虑调节各种参数(option tuning) ?支持所有的Lucene查询语法,包括Internet查询操作符(+, -, "") ?各种自定义查询处理选项 ?能够跨越多个字段搜索 ?可配置同义词(synonym words)和过滤词(stop words)文本文件 ?支持拼写检查(spell check)器 ?支持高亮(high light)显示搜索结果中的匹配关键字 ?复杂、强大的结果排序选项 ?Faceted metadata搜索结果 ?能够动态分组搜索结果 ?可配置的缓存选项,加速查询响应速度 ?可为扩展性和容灾配置索引复制(replication),like mysql replication? ?基于web浏览器的管理接口,提供统计、报告、调试等 ?丰富的操作客户端:Client for Ruby, PHP,Java, Python等 How To Get Solr UP And Running? 实际上,得到Solr并且使其运行起来是件很容易的事。首先,从apache的官方网站上下载Solr 的Package。下载后解压zip(for windows)或者tar.gz(for linux),当前最新稳定版本为1.3.0。 Solr包结构图 打开example文件夹,如图:

我终于深入参与了一个分布式系统了,好多想法不一样了!

我终于深入参与了一个分布式系统了,好多想法不一样了! 原文出处:Turbo Zhang 的博客前言 过去两个月深入的参与了一个分布式系统的开发,记得之前有人说过“想成为架构师之前,都是从微观架构开始的”。尽 管我从没想过将来的某一天要成为一个架构师,或者领域专家,我只是想萌萌哒的编码,写着自己喜欢的Code,和一 群志同道合的朋友做出大家喜欢的商品和产品。但是工作久了慢慢的搭架子的事情还是会来到你的面前,因为时间总会把一部分人慢慢推向海边,使得他们成为最早见到阳光的人。不扯淡了,为什么要说阳光呢,还是因为过去的两(三)个月可能过的太充实也太痛苦了,完成之后,曙光来临的时候整个人是会发光的哦。“深度”参与是因为我终于有机会在搭 架子的过程中有了话语权和选择权,同时也会承担70%以上的编码工作。 之前我的自我认知是我可能在软件方面的积累还可以,比如设计模式,架构分层,程序解耦,API入手等方面,但是总觉得我在硬件网络方面积累的太少,太薄了。 比如: 不同操纵系统之间的特点;

网络端口管理与分发; 哪些网络协议可以帮助我们更好的完成工作,监控虚拟机的时候是在虚机上加代理好还是用协议去控制; 硬件是否支持分布式,在扩展过程中对于.net C#的兼容怎么样; 什么时候使用多线程,在把线程交给程序调度的时候我们怎么控制和捕捉线程的异常; 日志系统对于整个分散的系统是多么的重要; 何时使用关系数据库,什么时候使用Nosql; 消息队列用擅长的MSMQ还是RabbitMQ. 怎样有效的和其他部门的同事沟通; 用什么样的方式去有效调度不同语言开发的系统; 测试用例对于大系统从零散到完整是多么的重要; 系统标准,代码原则对于后期的维护余扩展是多么的重要;等; 项目简介 首先项目详细内容不便多说,简答的说,就是为国内某大型厂商建立一套协调其自身搭建的私有云以及其购买的公有 云的一套系统。说牛X一点就是:一套混合云系统。 使用Restful

Solr开发指南

Solr 全文检索技术

1.Solr介绍 15 2.Solr安装配置-SolrCore配置 15 3.Solr安装配置-Solr工程部署 10 4.Solr安装配置-Solr工程测试 15 5.Solr安装配置-多SorlCore配置 10 6.Solr入门--schema 20 7.Solr入门-安装中文分词器 15 8.Solr入门-自定义业务系统Field 20 9.Solr入门-SolrJ介绍10 10.Solr入门-SolrJ索引维护 20 11.Solr入门-数据导入处理器20 12.Solr入门-搜索语法 10 13.Solr入门-SolrJ-搜索 20 14.Solr案例-需求分析 10 15.Solr案例-架构设计 15 16.Solr案例-Service 20 17.Solr案例-Controller 20 18.Solr案例-主体调试 20 19.Solr案例-功能完善

1【Solr介绍】 1.1S olr是什么 Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。 Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。 1.2S olr与Lucene的区别 Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。 Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。 1.3Solr下载 从Solr官方网站(https://www.360docs.net/doc/f215939338.html,/solr/ )下载Solr4.10.3,根据Solr的运行环境,Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。 Solr使用指南可参考:https://https://www.360docs.net/doc/f215939338.html,/solr/FrontPage。

相关主题
相关文档
最新文档