注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Koala++'s blog

计算广告学 RTB

 
 
 

日志

 
 

企业级搜索引擎Solr 第一章:开启Solr之旅(Quick Starting Solr)[1]  

2012-08-04 14:22:00|  分类: 搜索引擎 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Quick Starting Solr

Author: David Smiley, Eric Pugh

译者:Koala++ / 屈伟

       欢迎来到Solr的世界,你在挑选搜索引擎技术真是有不凡的眼光。在本章中,我们将介绍下面几个方面:

l  简要介绍SolrLucene是什么

l  Solr与数据库有什么不同

l  如何获取SolrSolr里面包含了什么

l  运行Solr并导入示例数据

l  简要介绍管理接口和主要的配置文件

An introduction to Solr

       Solr是一个开源的企业级搜索服务器。它是一个成熟的搜索服务器,使用它的站点有CNETZappos,和Netflix,以及许多的政府和企业的内网站点。Solr是用Java写的,如果要通过插件接口扩展和修改Solr也要使用Java。但是它作为服务器,可以使用多种方式与其通讯,比如HTTPXMLJSON,所以虽然了解Java是有好处的,但不是必需的。Solr除了搜索引擎必需具体的功能——返回查询结果的列表之外。它还有很多的特性,比如高亮关键词,Faceted导航(多数的电子商务网站上都有这功能),查询拼写纠错,查询提示,和查找相似文档的特性。

       你会发现本书中多次出现faceting,或是faceted navigation。它是Solr的一个Killer特性,大多数人在使用电子商务网站时没有留意到这个功能。 Facteting可以得到搜索中找到的文档的统计信息,比如你搜索一个关键词,你可以看这个关键词在不同的商品类目中出现多少次,或是日期,价格信息等等。第6章,Faceting会重点介绍这一技术。

Lucene, the underlying engine

       在介绍Solr之前,最好先介绍一下Solr底层的核心技术Apache LuceneLucene是一个开源的高性能的文本搜索引擎库。Lucene是由Doug Cutting开发,并在2000年开源,在此之后由强大的在线社区的改进并成熟,现在已经是使用最广泛的搜索引擎技术。Lucene仅是一个搜索引擎核心库,它不是一个服务,更不是一个爬虫。认识到这一点很重要,它甚至没有配置文件。

       要使用Lucene,你需要调用它的API编写代码。你需要先要建索引,你需要提供要建索引的源文档。在Lucene中一个文档(document)就是一个(field)的集合,域是指一个键值对,键是指域名,值就是域的值,域的值可以是文本也可以是数字。你可以用一个分析器(analyzer)对域的值进行分词,分词会将域的值分成一系列的词元(tokens,words),词元再经过词干化(stemming),替换同义词,或再进行其它的处理。最终产生出来的词元被称为(term)。上述的过程被称为文本分析(text analysis)Lucene将每个文档索引到磁盘的索引(index)中。Lucene的索引是倒排索引(inverted index,即是一种词指向包括这个词文档列表的一种索引,索引里面还包含了词在源文档中的位置信息。有了索引之后,你可以用一个查询字符串去搜索,Lucene会根据自己的语法解析查询字符串。Lucene会对每个匹配的文档打分,得分(score是一个表达相关度的数值,并最终返回得分最高的文档。

       上面描述了Solr的核心Lucene是如何工作的。描述中包含了本书中将会用到的许多术语,这些术语在后面会详细介绍。

Lucene的重要特性有:

l  Lucene的索引是一个支持能高效查询的倒排索引。它也支持数值型数据的范围查询。

l  丰富的链式文本分析组件,比如分词器和特定语言的词干器,它们可以将一个文本字符串转化成一系列的词。

l  支持多种查询语法,从最简单的单词查找到模糊匹配。

l  有着基于信息检索原理(Information Retrieval的打分算法,打分算法可以先产生最可能的候选集,再用灵活的方法去改变分数。

搜索相关的特性有:

l  将找到的查询词高亮显示的功能。

l  基于索引内容或是一个词典进行拼写检查的功能。

l  列出与一个文档相似的文档列表的功能。

如果想更深地学习Lucene,可以阅读Michael McCandlessErik HatcherOtis Gospodnetic所著的Lucene in Action第二版。

Solr, a Lucene-based search server

       Apache Solr是一个基于Lucene的企业级搜索服务器。Solr的许多特性是由Lucene所决定的,本书会经常提到Lucene。直接用Lucene开发一个高性能,特性丰富的搜索应用是有难度的。Solr通过配置文件和HTTP参数发掘了Lucene的力量,并且Solr还添加了自己的一些特性。Solr自身的一些重要特性有:

l  服务器可以通过HTTPXMLJSON格式的数据通信。

l  配置文件,主要配置索引的方式,它定义了域的信息和域的文本分析方式。

l  服务器Cache可以更快的提供搜索响应。

l  基于页面的管理接口,包括:

?  运行时搜索和Cache性能统计信息

?  查看每个域的统计信息

?  调试文本分析的工具

l  Faceting

l  dismax查询查询语法解析器比Lucene原生的查询解析器更好用。

l  通过距离进行地域搜索

l  支持分布式搜索和索引复制,所支持Solr处理大数据扩展

l  Solritas:一个web搜索示例UI,它展示了许多Solr的搜索特性。

另外,还有两个contrib模块使Solr的功能更完善:

l  DataImportHandlerDIH:它有导入数据库,e-mail,和爬虫爬取的数据的能力。它还包含一个调试工具。

l  Solr Cell:一个针对Apache Tika的配接器,它可以从多种格式的文件中提取文本内容。

Comparison to database technology

       (译注:略去一些内容)

       Solr有着下面的一些劣势,希望读者注意:

l  没有更新操作:如果Solr中的一个文档的部分内容需要更新,那么整个文档需要替换。在Solr内部,更新是由一次删除和一次添加完成更新的。

l  提交速度慢:Solr的搜索高性能和一些特性是基于Cache的。当用提交操作完成新添加的文档时,cache要重建。这个过程要耗费在几秒到一分钟之间,但在极端情况下要花更长时间。

我关于数据库与Solr写过更深入的文章:“Text Search, your Database or Solr”在http://bit.ly/uwF1ps

Getting started

       我们先下载Solr,检查它的目录结构,然后运行它。我们就可以在下节介绍运行中的Solr服务器了。

下载Solor: 你可以从http://lucene.apache.org/solr/下载Solr。本书是基于3.4版本的。

安装Java:下载最新版本的Java

本书的补充资源:在我们的站点http://www.solrenterpricesearchserver.com上有本书的代码资源。在资源中有对MusicBrainz.org数据进行索引的一个Solr安装程序,脚本可以下载并索引数据到Solr,大约有800万个文档,资源中还有每章的示例代码。

Solr’s Installation directory structure

       当你下载解压Solr之后,你会发现一下比较直观的目录结构:

l  client:特定语言的Solr的客户端API,用于与API交互。

l  contribSolrcontrib模块。它们是对Solr的扩展。这些扩展模块的最终的JAR文件其实是在dist/目录。所以这里的文件大部分是依赖JAR文件。

?  analysis-extras:一些文本分析模块。有一些“ICUUnicode类提供多语言支持,有中文词干器,波兰语词干器。你会在下章学习到更多文本分析的内容。

?  clustering:一个聚合搜索结果的引擎。在第7章有一页的介绍。你可以到wiki上看到更多内容:http://wiki.apache.org/solr/ClusteringComponent

?  dataimporthandlerDataImportHandler是一个非常流行的数据导入模块,它可以从数据库或是其它来源导入数据。

?  extraction:一个与Apache Tira整合的框架,可以从多种文件格式中抽取文本。这个模块也被称为SolrCell,在DIHTikaEntityProcessor中也使用了Tira,在第三章会进行介绍。

?  uima:与Apache UIMA集成的框架,它可以从文本中抽取源数据,可以得到结点名并能分析文本的语言,如果想了解更多,可以看Solrwikihttp://wiki.apache.org/solr/SolrUIMA

?  velocity:一个基于Velocity模板语言的简单的搜索UI框架。见第九章。

l  docsSolr的文档。

l  example:一个完整的Solr服务器,它是一个完整的例子,有Jetty servlet引擎(一个Java web服务器),Solr,一些示例数据和一些示例配置。值得了解的子目录有:

?  example/etcJetty的配置。你这在里可以改变端口,将默认的8983改为80端口。

?  example/docs:一些索引源文件示例,里面还有post.jar程序可以将文件发送给Solr

?  example/solr:一个默认的Solr示例,它是一个学习Solr的好的起点,我们在后面的介绍中会用到它。

?  example/weappsJetty部署Solr的地方, SolrWAR文件拷贝的位置,里面包含着Solr编译过的代码。

Solr's home directory and Solr cores

       Solr启动时,它要做的第一件事是确定Solr的主目录是什么。第八章会介绍多种告诉Solr主目录的方法,但默认情况下,它是Solr启动目录下的solr目录。你通常可以在主目录看到一个solr.xml文件,它是可选的,但我们推荐这种配置方式。它主要列了Solr的核心(Solr core。在简单的配置中,比如example/solr,它只有一个Solr核心,它用Solr的主目录作为它的核心实例目录(core instance directory。一个Solr核心有一个Lucene索引和支持该索引的Solr配置。几乎所有与Solr的交互都在一个特定的核心上。如果你想索引不同格式的文件,或是使用多个索引,你可以在同一个Java服务器上使用多个Solr核心。第八章将讲述其中的细节。

       一个Solr核心的实例目录如下:

l  conf:配置文件目录,下面两个配置 文件很重要。

l  conf/schema.xml:索引的Schema,包括域的类型定义和域的分析器链。

l  conf/solrconfig.xml:主要的Solr配置文件。

l  conf/xslt:多个XSLT文件,它们可以将Solrxml查询响应转化为多种格式,比如AtomRSS。见第九章。

l  conf/velocityHTML模板和相应的web文件,它们是基于SolritasUI原型,在第九章会介绍。马上我们将用这个模板介绍solr的一些特性。

l  dataLucene的索引文件位置,它们是二进制文件,所以你无法对它进行改变,除非你是想删除它。

l  lib:解析JAR文件的位置。这是一个放置contrib JAR和它们依赖文件的合理位置。


Running Solr

    现在我们将启动Jetty,并看下Solr是在没有数据的情况下如何运行的。

    先到example目录下,然后运行Jettystart.jar文件,输入下面的命令:

>>cd example

>>java –jar start.jar

    >>是命令提示符,你将看到近一页的输出信息。当它启动完成后,你会在最下面看到下面的信息:

2008-08-07 14:10:50.516::INFO: Started SocketConnector @ 0.0.0.0:8983

    0.0.0.0表示Solr监听从任何来自任何主机的连接,8983是端口号。如果Jetty提示这个信息,并不表示Solr部署成功了。如果包有问题,你可能会看到错误提示,比如堆栈回溯信息。如果的确没有成功,你应该还是可以访问web服务器http://localhost:8983。它会给出一个404页面,可以在http://localhost:8983/solr访问Solr,如果你浏览这个页面,你可以看到关于Solr没有正常加载的详细原因,你还可以去查看Solr管理页面,它在http://localhost:8983/solr/admin。你将会经常访问它。

  评论这张
 
阅读(4678)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017