文章来源:http://alexhi.sinaapp.com/archives/500
【1:开始及建立索引】
在了解 Solr 前推荐先了解一下 Lucene,Solr 基于 Lucene。
内容是官方教程,原文链接见:Solr
Tutorial。我对其进行了简单的翻译。
文中使用的是 Linux 系统,我针对 Win 系列在翻译上做了些调整。例如文中提到的部分命令行在 UNIX,Cygwin 或者 MacOS 中的 shell 运行的语句,我就直接写对应的我在 CMD 下的语句了,如果想看 shell 命令,可以去英文原文中找找。
概览
本文档通过使用示例程序和示例数据来运行 Solr ,展示了一系列基础的操作。
需要
在开始这个教程前,你需要准备:
-
Java 1.5 或更新,你可以从这几个地方拿到:Oracle,Open
JDK,IBM,你也可以在命令行中运行java
-version来看看自己机器上的版本。Gnu 的 GCJ 不支持 Solr。
-
一个Solr
发布包。
开始
推荐你在同一台机子上看这个教程并运行示例程序,这样教程里面提及的链接就能正确地指向到你的 Solr 服务器。
Solr 可以运行在你喜欢的任何一个 Java Servlet 容器中,不过为了使这个教程简洁,我们将安装运行 Jetty(开源的servlet容器),运行 Solr WAR,加载示例配置文件这一套流程封装在 start.jar 中了,我们需要做的,就是简单的运行这个 jar 包。
那么具体操作是:解压 Solr 发布包,放置到合适位置。然后打开子文件夹”example“,再运行文件夹里的 start.jar。我的目录是 G:\Java_Info\apache-solr-3.6.1\example。
C:\Users\AlexWu>cd G:\Java_Info\apache-solr-3.6.1\example
C:\Users\AlexWu>g:
G:\Java_Info\apache-solr-3.6.1\example>java -jar start.jar
你运行了上面的语句后,程序将会在端口 8983 上启动 Jetty 应用服务器,并且在你的终端上将展现来自 Solr 的日志信息。
现在,你就可以登录浏览器访问http://localhost:8983/solr/admin/,看看
Solr 的运行情况了,OK,现在你已经开启 Solr 服务了。
建立索引
你的 Solr 服务器已经运行了,不过它还没有包含任何数据,你可以通过 POST请求来更新 Solr 索引,POST请求内容中可能包含添加、更新、删除文档的指令,或者提交待补充、删除和优化的索引的命令。
在子文件夹”exampledocs“中包含了符合 Solr 要求的指令类型示例,另外也包含了一个用于从命令行将这些示例指令 POST 给 Solr 服务器的 java 工具 jar,post.jar。
我们打开一个新的命令行窗口,进入目录后运行命令“java -jar -post.jar”,命令后面跟些这个文件夹下的 XML 文件,效果如下:
G:\Java_Info\apache-solr-3.6.1\example\exampledocs>java -jar post.jar solr.xml m
onitor.xml
SimplePostTool: version 1.4
SimplePostTool: POSTing files to http://localhost:8983/solr/update..
SimplePostTool: POSTing file solr.xml
SimplePostTool: POSTing file monitor.xml
SimplePostTool: COMMITting Solr index changes..
你已经成功的在 Solr 中建立了两个文档的索引,现在你可以使用浏览器上 Solr 的管理员界面的“Make a Query”接口来搜索“solr”了,点击“Search”按钮,页面将会带你到下面这个 URL 中:
http://localhost:8983/solr/select/?q=solr&start=0&rows=10&indent=on
返回的文本是包含了搜索结果的 XML 信息。
当然你也可以为所有的示例数据建立索引,运行下面的命令(假设你的命令行终端支持 *.xml 注释):
G:\Java_Info\apache-solr-3.6.1\example\exampledocs>java -jar post.jar *.xml
SimplePostTool: version 1.4
SimplePostTool: POSTing files to http://localhost:8983/solr/update..
SimplePostTool: POSTing file gb18030-example.xml
SimplePostTool: POSTing file hd.xml
SimplePostTool: POSTing file ipod_other.xml
SimplePostTool: POSTing file ipod_video.xml
SimplePostTool: POSTing file mem.xml
SimplePostTool: POSTing file money.xml
SimplePostTool: POSTing file monitor.xml
SimplePostTool: POSTing file monitor2.xml
SimplePostTool: POSTing file mp500.xml
SimplePostTool: POSTing file sd500.xml
SimplePostTool: POSTing file solr.xml
SimplePostTool: POSTing file utf8-example.xml
SimplePostTool: POSTing file vidcard.xml
SimplePostTool: COMMITting Solr index changes..
现在你就可以使用默认的Solr
查询语法(Solr Query Syntax,Lucene 查询语法的超集)来搜索任何各种东西了,好比这些:
另外还有很多途径将数据导入到 Solr 中:
【2:数据操作】
更新数据
你也许注意到了,我们上传了两次 solr.xml 但是搜索 solr 时只得到一个结果。这是因为示例的 Solr 的 schema.xml 为一个叫做 id 的字段定义了“uniqueKey”,当你上传的文档包含了相同的“uniqueKey”字段的值时,Solr 会自动为你将这个文档覆盖原有文档。
我们可以看看 Solr 统计页面的“CORE”区域中 numDocs 和 maxDoc 这两个字段的值,通过这两个字段值的变化来理解前面提到的内容:
http://localhost:8983/solr/admin/stats.jsp
numDocs是指在索引中可搜索到的文档数(由于部分文件可能包含不止一个<doc>,这个值有可能大于
XML 文件数)。maxDoc则数值更大,因为它还包含了逻辑上已经删除的但还未从索引中移除的文档。因为新文档会自动覆盖旧文档,所以你可以随你喜欢地重复上传相同的 XML 文件而numDocs数值不会增加。
你可以尝试着编辑已经存在的 XML 文件,改变一些数据,然后再次运行java -jar post.jar命令,然后你将看到这些变化会放映在随后的搜索中。
删除数据
我们可以很多指令,例如:通过在 URL 中 POST 请求一个删除命令来删除数据、指定文档的 unique key 的值、一个匹配多个文档的查询(留意这个)等等。由于这些命令都较小,我们可以在命令行中指定他们,而无需引用 XML 文件。
我们可以通过执行下面的命令来删除一个文档:
java -Ddata=args -Dcommit=no -jar post.jar "<delete><id>SP2514N</id></delete>"
执行完后,我们可以访问统计页面,往下滑到“UPDATE
HANDLERS”区域,你将看到“deletesById : 1”。
如果你搜索id:SP2514N,它还能被找到,因为在这些改变提交并且开启一个新的搜索前,索引的改变还不能被看到。为了防止这种情况发生,发送一个提交命令给
Solr(post.jar 默认的帮你做了这个):
java -jar post.jar
现在再执行搜索id:SP2514N将发现已经找不到匹配的文档了。这时你也可以看看统计页面中UPDATE
HANDLERS 区域和CORE 区域 的这些改变。
接下来我们可以使用delete-by-query 来删除所有名字中包含DDR的东西:
java -Ddata=args -jar post.jar "<delete><query>name:DDR</query></delete>"
提交(commit)是一个代价较大的操作,所以最好在索引有多次改变后在最后进行一次批量的提交。还有一个优化(optimize)命令,所做的事情和提交命令一样,但是将所有的索引片段合并成了一个片段,使之能较快搜索,并且移除所有已经删除的文件。所有的更新操作都会被记录。了解细节可以点击这里。
为了继续进行教程,我们重新进入exampledocs目录添加一下之前可能删除掉的文件:
java -jar post.jar *.xml
查询数据
搜索操作可以通过 HTTP 的 GET请求的selectURL 来执行,其中 URL 包含一个参数q,其值为待查询字符串。你可以通过一系列可选参数来控制请求返回信息。例如你可以使用“fl”参数来控制返回什么字段、相关性指数(relevancy
score)是否返回:
Solr 在管理员界面中提供了一个查询表单,这个表单能够设置一些了请求参数,它在测试和调试查询中比较有用。
排序
Solr 提供了简单的方法为一个或多个索引字段进行排序,使用“sort”参数,以逗号隔开,字段名加升降方向即可:
“score”也可以作为一个字段进行排序:
复合函数也可以在排序参数中使用:
假如未指定排序方式,则默认为score desc以返回最高相关度的内容。
高亮
命中字段高亮是使返回的匹配文档内容中会带对应的高亮代码片段,下面的搜索示例是搜索video card,并且指定高亮字段为name,features。高亮代码区域将被加入到返回文档中,高亮的文字将会以<em>标签围绕(表强调)。
…&q=video
card&fl=name,id&hl=true&hl.fl=name,features
要了解更多控制高亮的参数请看这里。
分类统计(分面搜索、Faceted Search)
这里先普及一下 Faceted Search,翻译上可以是分类统计或分面搜索。
分面,分面是指事物的多维度属性。例如一本书包含主题、作者、年代等分面。而分面搜索是指通过事物的这些属性不断筛选、过滤搜索结果的方法。可以将分面搜索看成搜索和浏览的结合。(此段来自CDC)
在这里我个人认为分类统计更贴近其含义,所以暂译为分类统计。
分类统计需要查询匹配的文件然后产生的各种属性或类别的计数。这样能使用户在现有搜索结果返回的分类基础上不断深入优化搜索结果。
下面的例子搜索了所有的文档(*:*),请求计数的分类字段为cat。
…&q=*:*&facet=true&facet.field=cat
虽然结果列表中仅返回了前 10 个文档,但实际上是为查询匹配的所有文档进行了一整套完整的分类计数。
我们也可以同时多个分类,下面的例子在 boolean 字段inStock上添加了一个分类:
…&q=*:*&facet=true&facet.field=cat&facet.field=inStock
Solr 也能为任意查询生成计数。下面的 ipad 的搜索示例展示了通过使用范围查询(range queries)查价格低于一百和高于一百的信息:
…&q=ipod&facet=true&facet.query=price:[0
TO 100]&facet.query=price:[100 TO *]
甚至可以按照日期进行分类。下面的实例对生产日期进行了分类计数(manufacturedate_dt 字段),将 2004 到 2010 每年进行分类:
…&q=*:*&facet=true&facet.date=manufacturedate_dt&facet.date.start=2004-01-01T00:00:00Z&facet.date.end=2010-01-01T00:00:00Z&facet.date.gap=+1YEAR
更多有个分类统计的信息也许可以在faceting
overview和faceting
parameters这两个页面找到。
搜索 UI
Solr 里包含了一个用 velocity 模板构建的搜索接口实例,包含了搜索,分类、高亮、自动完成以及地理信息搜索。
实例网址:http://localhost:8983/solr/browse。
文本分析
文本字段通常通过拆分文档为单词、转小写、去复数、增加相关性(stemming to increase relevancy)来进行建立索引。为匹配索引内容,这些文本转换也通常适用于任何查询。
schema定义了索引中的字段和什么类型的分析适用于这些字段。当前你的服务器使用的
schema 可通过管理员页面的[SCHEMA]链接访问到。
我们文本内容的最好的分析组件(标记和过滤)很大程度上依赖于具体的语言。正如你在前面的[SCHEMA]链接看到的示例 schema 里,有使用一个名字为text_general的fieldType,其默认值适用于所有语言。
假如你知道你的文本内容是英语,好比本教程中的示例文档,则推荐你使用text_en_splitting来替代原有 fieldType 值,则将使用英语特定的词干(English-specific stemming)、断句方式(stop word
removal)以及分裂复合词(split compound words)等来进行文本分析。
可以编辑solr/example/solr/conf目录下的schema.xml文件,来为text和features字段设置fieldType成text_en_splitting。例如这样:
<field name="features" type="text_en_splitting" indexed="true" stored="true" multiValued="true"/>
...
<field name="text" type="text_en_splitting" indexed="true" stored="false" multiValued="true"/>
在做了以上修改后停止并重启 Solr ,再使用java -jar post.jar *.xml重新 POST 所有的示例文档,现在再查询下面的示例将会展示英语特定的转换:
完整的关于分析组件(analysis components)、Analyzers、Tokenizers 和TokenFilters 的信息请参见此处。
分析调试(Analysis Debugging)
这里有个很方便分析调试页面,通过这个页面你可以看到一个文本串是怎样分解成各个词,并将展示这些文本内容经过链中每个过滤器后的结果。
这个url展示了
“Canon Power-Shot SD500″ 怎样通过使用text_en_splitting类型逐步被替代创建。表中每一行展示了在通过分析器(analyzer)下一个TokenFilter后后所得到的结果。注意,powershot和power,shot都被索引了。在同一个位置所生成的
Token 将展示在同一列中,例如shot和powershot(可比较在使用
text_general 类型时 token 生成情况)。
勾选verbose
output将会展示更多细节,例如链中每一个分析主键的名字、token 所在位置以及其在原始文本中的开始和结束位置。
勾选highlight
matches将同时提供索引和查询的值,并会在Index Analyzer区域中高亮显示所有在Query
Analyzer区域中所匹配到的字段。
其他有意思的示例:
分享到:
相关推荐
Solr3.6.1英文chm格式API 全文搜索用的
版本3.6.1是Solr的一个重要里程碑,提供了稳定性和性能优化。通过深入理解这个版本的源代码,开发者可以更深入地掌握Solr的工作原理,从而更好地利用其功能进行全文检索、拼写检查、相关性排序等任务。 在Apache ...
**SOLR应用教程** **一、概述** 1.1 企业搜索引擎方案选型 在为企业选择搜索引擎解决方案时,需要考虑的关键因素包括处理能力、可扩展性、易用性、性能以及对特定业务需求的支持。Solr作为一种开源的企业级搜索...
solr3.5开发教程solr3.5开发教程solr3.5开发教程solr3.5开发教程solr3.5开发教程
项目工程资源经过严格测试运行并且功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:包含...
文档的【描述】部分反复强调“solr 使用官方指南”,这意味着文档是权威的、官方认可的学习材料,包含了使用 Solr 进行搜索引擎搭建、部署、管理等操作的官方指导和最佳实践。 【标签】为 "solr",直接反映了文档...
### Solr学习入门教程知识点详解 #### 一、Solr概览 Solr是一个开源的企业级搜索服务器,采用Java作为底层开发语言,具备高度的可扩展性和灵活性。它通过标准的HTTP协议和XML格式进行通信,这意味着即使不精通Java...
【Solr自学详细教程,吐血总结】 在IT领域,特别是在大数据处理和信息检索中,Apache Solr扮演着至关重要的角色。Solr是一款强大的、基于Java的全文搜索服务器,它建立在Lucene之上,提供了更高级的企业级搜索功能...
Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个...本文为solr下载安装教程
solr学习入门经典教程,赶紧学习吧,从solr的搭建讲起,中文分词器的配置
**Solr 教程**:文档中的教程部分为初学者提供了快速入门的方法,通过简单的步骤演示了如何安装 Solr、创建索引以及执行基本的查询操作。 **快速概览**:这部分内容概述了 Solr 的核心概念和技术特点,包括其架构、...
在本教程中,我们将深入探讨Solr 3.5版本的开发应用,重点关注其实战应用,以帮助开发者更好地理解和利用这个强大的搜索引擎。 一、Solr概述 Solr的核心功能包括文本分析、索引构建、查询处理和结果排序。它支持...
solr详细配置教程与solrj的使用
本教程将引导你完成Solr的基本安装、配置以及数据库索引的建立,特别关注定时增量索引这一重要特性。 首先,从Apache官方网站下载Solr的最新稳定版本,例如5.1.0。解压缩文件到任何你喜欢的目录,比如F盘。接下来,...
虽然 Solr 可以运行在任何兼容的中间件上,但在本教程中,我们将以开源的 Apache Tomcat 为例。从 Apache 官网下载 Tomcat 的解压版,并按照官方文档的指示进行安装。 安装 Solr 本身,可以从 Apache 官网获取最新...
1. **下载与解压Solr**:首先需要从官方源获取Apache Solr的最新版本,并将其解压缩到一个合适的文件夹中。这将包含Solr的核心组件和配置文件。 2. **创建核心(Core)结构**:在`solr/server/solr/`目录下,创建一个...
### Solr 6.2 官方版参考手册知识点概览 #### 一、Solr简介与概述 **Apache Solr** 是一个高度可扩展且高性能的企业级搜索平台,它是基于 **Apache Lucene** 的开源搜索服务器。Solr 6.2 作为该系列的一个版本,...
### 开源企业搜索引擎SOLR的应用教程 #### 一、概述 **1.1 企业搜索引擎方案选型** 随着互联网的发展以及用户对于信息检索需求的增长,企业级搜索引擎成为了提升用户体验的关键技术之一。针对不同的应用场景,有...
[Packt Publishing] Solr 管理教程 (英文版) [Packt Publishing] Administrating Solr (E-Book) ☆ 图书概要:☆ Master the use of Drupal and associated scripts to administrate, monitor, and optimize Solr...
### 开源企业搜索引擎SOLR的应用教程 #### 一、概述与特性介绍 **1.1 企业搜索引擎方案选型** 对于门户社区等网站来说,搜索引擎功能是提升用户体验的关键因素之一。当前,针对搜索引擎功能的需求有多种解决方案...