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

Koala++'s blog

计算广告学 RTB

 
 
 

日志

 
 

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

2012-08-06 19:21:48|  分类: 搜索引擎 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

A quick tour of Solr

    打开网页http://localhost:8983/solr/admin/。本节介绍将会让你大致了解这个接口,但我们不会进行深入介绍。(译注:图是4.0的图,文字是3.X的内容,下面的内容文不对图的)

 

企业级搜索引擎Solr 第一章:开启Solr之旅(Quick Starting Solr)[2] - quweiprotoss - Koala++s blog

 

    上面页面顶部灰色部分是每个管理页面的头。当你要处理多个Solr实例时,比如开发环境加上生产环境、多核心、Solr集群这些情况时,知道你自己在哪在看哪个实例是很重要的。下面是IP和商品。(example)Schema的名字(译注:图中是4.0新的界面,没有example),Schema配置文件顶部的一个标签配置它的名字。如果你对不同的数据集有多个Schema,则页面上的Schema名可以很好地区别它们。下面是当前工作目录cwd,和Solr的主目录。核心的名字和数据目录也按理也应该在管理页面上,但是它们没有显示。

    下是对导航菜单的介绍,你可以从导航菜单进入不同的管理页面和查看配置数据。

l  SCHEMA:直接显示schema.xml配置文件,它是一个重要文件,会列出索引的域和它们的类型。

l  CONFIG:直接显示solrconfig.xml配置文件。它也是一个重要的文件,它是主配置文件。

l  ANALYSIS:它用于分析与文本分析相关的查询和索引问题,稍后会介绍一个高级的界面。

l  SCHEMA BROWSER:它是用于分析Schema的界面,它显示了索引中的真实数据。我们稍后再讨论。

l  REPLICATION:它包括了索引复制状态信息。它仅当复制功能开启时显示。更多关于此的内容在第十章。

l  STATISTICS:一些统计信息,比如耗时信息和Cache命中率。在第十章,会再详细讨论。

l  INFO:关于Solr内部组件的版本信息。坦白地讲,它没什么用。

l  DISTRIBUTION:它包含一些基于rsync索引复制的状态信息。现在内部基于Java的方式取代了这种方式,所以现在它不推荐使用。在第十章会讲述如何扩大Solr规模,最后会给出wiki的链接告诉你如何去做。

l  PING:它会返回一个XML格式的状态文档。如果你提交的查询它不能处理,它会失败。如果你在使用负载均衡,或是其它的工具来检查Solr是否在工作,将其配置指向这个URL

l  LOGGING:这里允许你修改运行时的Solr不同组件日志级别。对于我们正在运行的Jetty,它的输出是输出到控制台。第八章会对日志进行更多的讨论。

l  JAVA PROPERITES:它列出了Java的系统参数,它是Java的全局环境变量。

l  THREAD DUMP:它显示一个Java线程的dump,这对于Java开发者分析问题很有用。

在主菜单有一个Make a Query文本框,在此你可输入一个简单的查询。但是Solr中现在还没有数据,所以现在尝试查询是没有意义的。

l  FULL INTERFACE:一个有更多选项的搜索框,它的功能还是比较有限的,但是你很快就会从本书学习到足够的知道自己构造URL直接搜索了。

最后,底部的Assistance区域包含一些Solr在线信息的有用信息。本章最后一节会详细介绍。

Loading sample data

Solr自带了一些示例数据和加载脚本,在example/exampledocs目录下。我们将调用post.jar程序,官方称为SimplePostTool,调用时参数是一串XML文件名,post.jar程序从第一个文件名遍历到最后一个,将它post给本机的Solr,在本例中根据默认配置是http://localhost:8983/solr/update。最后,它会发送提交(commit)命令,它会将从上次提交到当前提交之间的文档都保存,使之可见。下面是命令的输出:

>> cd 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

… etc.

SimplePostTool: COMMITting Solr index changes..

    如果你在*nix环境下使用,你可以使用Shell脚本post.sh,它与post.jar功能相似,但它使用的是curl。我介绍你查看一下post.sh脚本的内容,它很短的。

    让我们看我们将要postSolr的一个XML文件,monitor.xml

<add>

<doc>

<field name="id">3007WFP</field>

<field name="name">Dell Widescreen UltraSharp 3007WFP</field>

<field name="manu">Dell, Inc.</field>

<field name="cat">electronics</field>

<field name="cat">monitor</field>

<field name="features">30" TFT active matrix LCD, 2560 x 1600,.25mm dot pitch, 700:1 contrast</field>

<field name="includes">USB cable</field>

<field name="weight">401.6</field>

<field name="price">2199</field>

<field name="popularity">6</field>

<field name="inStock">true</field>

<!-- Buffalo store -->

<field name="store">43.17614,-90.57341</field>

</doc>

</add>

    使用XML文件postSolr很简单,虽然这个文件没有展示所有的元素和属性,但它已经展示了许多的内容了。多个文档可以将多个<doc>放在<add>标签表示,这在添加批量文档时很有用。还有一个重要的标签<commit/>,它是在post.jarpost.sh中在一个独立的post中发送的。第三章会介绍更多的数据加载方式。

A simple query

    Solr的管理页面上,可以简单地搜索一个词monitor。你只需要输入这个词并点击search按钮。结果URL如下:

http://localhost:8983/solr/select/?q=monitor&version=2.2&start=0&rows=10&indent=on

    这个表单和Full Interface中的表单都是标准的HTML表单。表单的请求变为了URL的参数进行一次HTTP GET请求,表单只提供所有可用参数的一部分。使用表单的好处是它能对查询中的特殊字符进行转义,并且你不需要记住参数的名字。在开发一个搜索引擎开始时使用表单是很方便的。

    Solr的搜索结果默认是XML格式的,大多数浏览器,比如Firefox都提供一个好的XML显示方式,有它有语法颜色并支持折叠。Solr支持以JSON和其它格式响应,但那是下一次的话题了。

    XML响应包含一个<response/>元素,它将全部的信息包括在内。第一个子元素包含请求头的元数据,下面是响应的开始部分:

<?xml version="1.0" encoding="UTF-8"?>

<response>

<lst name="responseHeader">

<int name="status">0</int>

<int name="QTime">3</int>

<lst name="params">

<str name="indent">on</str>

<str name="rows">10</str>

<str name="start">0</str>

<str name="q">monitor</str>

<str name="version">2.2</str>

</lst>

</lst>

    这里我们看到:

l  Status:一般为0,除非有严重的错误发生。

l  QTimeSolr完成搜索的时间,单位是毫秒。它不包括网络传输的时间。因为有Cache层,所以你再次查询的时候,搜索时间通常在1毫秒内就完成了。

l  Params:请求参数的列表。默认情况下,只列出明确出现在URL中的参数,可以在solrconfig.xml<requestHandler>中指定。

接下来是最重要的部分,结果信息:

<result name="response" numFound="2" start="0">

其中numFound表示全部索引中有多少文档匹配这次查询,start是指返回结果是匹配结果的第几个文档(即偏移)。注意,在响应头的查询参数部分也有相同的参数。参数rows是指最多返回多少个匹配文档,这个例子中是10个。

通常你想看到每个匹配文档的得分(score,得分是表明一个文档与一个查询有多相关的数值。搜索默认不返回这个值,除非明确指定。Full interface中默认包含这个参数。要求返回得分的搜索会在<result/>中有一个maxScore属性,它是所有匹配文档中最高的得分。它与排序顺序和分页参数无关。

搜索结果的内容是匹配查询的文档列表。默认排序是按得分降序排序。稍后,我们将会对特定域进行排序。

<doc>

<arrname="cat">

<str>electronics</str>

<str>monitor</str>

</arr>

<arr name="features">

<str>30" TFT active matrix LCD, 2560 x 1600,.25mm dot pitch,700:1 contrast</str>

</arr>

<str name="id">3007WFP</str>

<bool name="inStock">true</bool>

<str name="includes">USB cable</str>

<str name="manu">Dell, Inc.</str>

<str name="name">Dell Widescreen UltraSharp 3007WFP</str>

<int name="popularity">6</int>

<float name="price">2199.0</float>

<str name="store">43.17614,-90.57341</str>

<float name="weight">401.6</float>

</doc>

<doc>

...

</doc>

</result>

</response>

    文档列表是比较直观的。默认情况下,Solr会返回所有存储(store)域。并不是所有的域都需要被存储,即有些域你在查询的时候要用到,但你却不需要返回它的值。注意,这里使用了一些基本数据类型strbooldateintfloat。注意,有些域是多值的,它们用arr标明。

    这是一个简单的关键词搜索。如果你使用更高级的特性,比如faceting和高亮,你会看到result元素之后有更多的XML内容。

Some Statistics

    我们接下来看一下统计管理页面:http://localhost:8983/solr/admin/stats.jsp。在我们载入数据之前,这个页面显示numDocs等于0,载入数据之后现在是17。如果你没有使用3.4版本,也许它的值会有所不同。也许观察敏锐的读者会发现我们这个值大于我们postSolrXML文件数。这是因为有的XML文件中包含了多个Solr文档。有时一部分文档被删除了,但是还没有提交,numDocs会大于实际的文档数。这可能是由明确地删除一下文档或是由更新一个文档时产生的一个新的docid引起的。注意名为/update请求处理者(request handler)有一些统计信息:

Name

/update

Class

org.apache.solr.handler.XmlUpdateRequestHandler

Version

$Revision: 1165749 $

Descrption

Add documents with XML

stat

handlerStart: 1317530339671

requests: 15

errors: 0

timeouts: 0

totalTime: 5276

avgTimePerRequest: 351.73334

avgRequestsPerSecond: 1.0589994E-4

    另一个请求处理者是search,它是处理我们搜索请求的统计信息。

    这些统计信息只针对当前运行的Solr,它们不保存到磁盘上。所以你不能将它们用于长期的统计中。

The Sample Browse Interface

    最后我们要介绍的是浏览接口,它在http://localhost:8983/solr/browse。它展示了多个Solr的特性:

l  标准的关键词搜索 。你可以对Solr的语法做实验。

l  查询调试:你可以看到解析后的查询和文档得分的解释信息。

l  查询提示:如果你输入“enco”,它会提示你“encoded”

l  高亮:高亮是以斜体形式表示,看起来也许不明显。

l  更多类似结果:给出类似的文档。

l  Faceting:域值facets,查询facets,数值区域facets,和时间区间facets

l  聚合:你必须按在线手册描述的方式启动中Solr

l  查询boosting:提高价格排序权重。

l  查询拼写检查:可以使用它来建立纠错的索引,和在参数中指定拼写纠错。详见第7章。

l  地理搜索:你可以根据距离过滤。点击在左上的spatial链接激活它。

这也是一个Solritas的例子,它用基于Apache Velocity的模板格式化Solr的请求。模板是在example/solr/conf/velocity下的VM文件。Solritas只是一个搜索UI原型,不建议用它来构建生产环境的UI。第九章会提供更多的信息。

    下面是页面的一个截图:

 

企业级搜索引擎Solr 第一章:开启Solr之旅(Quick Starting Solr)[2] - quweiprotoss - Koala++s blog

 

Configuration Files

    example/solr/conf里的配置文件中有足够的注释,我们这里就不深入细节了,只讲什么配置文件在哪里。

    Solr的索引Schema是在schema.xml中定义的。它在<types>元素中包括了域类型的定义,在<fields>中指定了索引的域。你会注意到我们添加到SolrXML文件中的域与配置文件中域是对应的。除了域的定义,你还会注意到<copyField>元素,它将一个域的值复制到另一个域。这样做的原因有很多,但最终都可以归结为以不同的方式索引,以进行特定的搜索需求。你会在下一章学习这些内容。

    Solrsolrconfig.xml文件中有很多可调的参数。在这我们看一下请求处理者(request handlers),它在<requestHandler>中定义。它几乎占了配置文件一半内容。在我们第一个查询中,我们不需要指定任何请求处理者,所以我们得到的默认的处理者:

<requestHandler name="search" class="solr.SearchHandler default="true">

<!-- default values for query parameters can be specified, these

will be overridden by parameters in the request

-->

<lst name="defaults">

<str name="echoParams">explicit</str>

<int name="rows">10</int>

</lst>

<!-- … many other comments … -->

</requestHandler>

    每个向Solr的请求,包括posting文档和搜索,都会由一个特定的请求处理者处理。处理者会产生一个相对URL路径,即/和名字,当我们先前上载一个文档时,处理者将按下面的定义一样处理,/update即是相对URL路径:

<requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />

    URLqt参数即是请求处理者的参数。

    Solr的请求几乎都可以通过URL的参数或是POST表单参数配置。它们也可以在配置文件的<1st name=”defaults”>请求处理者中指定,比如先前介绍过的rows=10。更多的信息可以在第章找到。

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

历史上的今天

评论

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

页脚

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