note:应用独立地与solr服务器交互的操作

索引操作

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

索引就是接受输入(本例中是博客条目、关键字和其他元数据)并将它们传递给 Solr,从而在 HTTP 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 命令样例
                <add>    <doc>        <field name="url">http://localhost/myBlog/solr-rocks.html</field>        <field name="title">Solr Search is Simply Great</field>        <field name="keywords">solr,lucene,enterprise,search</field>        <field name="creationDate">2007-01-06T05:04:00.000Z</field>        <field name="rating">10</field>        <field name="content">Solr is a really great open source search server. It scales,        it's easy to configure and the Solr community is really supportive.</field>        <field name="published">on</field>    </doc></add>

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

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

搜索命令

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

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

关于查询语法的一点注意

用于 StandardRequestHandler 的 Solr 查询语法与 LuceneQueryParser 支持的查询语法相同,只是前者加入了一些排序支持。示例应用程序对输入的值几乎没有进行验证,而且没有演示如查询增强、短语、范围筛选等功能,所有这些功能在 Solr 和 Lucene 中都有效。有关 Lucene QueryParser 的更多信息,请参阅 参考资料。在本文的第 2 部分,我将介绍管理界面中的一些有助于调试查询语法和结果的工具。
  • 布尔运算符:默认情况下,用于合并搜索条目的布尔运算符是OR。将它设为 AND 要求匹配的文档中出现所有的条目。

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

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

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

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

清单 2. 搜索结果示例

                <response>    <lst name="responseHeader">        <int name="status">0</int>        <int name="QTime">6</int>        <lst name="params">            <str name="rows">10</str>            <str name="start">0</str>            <str name="fl">*,score</str>            <str name="hl">true</str>            <str name="q">content:"faceted browsing"</str>        </lst>    </lst>    <result name="response" numFound="1" start="0" maxScore="1.058217">        <doc>            <float name="score">1.058217</float>            <arr name="all">                <str>http://localhost/myBlog/solr-rocks-again.html</str>                <str>Solr is Great</str>                <str>solr,lucene,enterprise,search,greatness</str>                <str>Solr has some really great features, like faceted browsing                and replication</str>            </arr>            <arr name="content">                <str>Solr has some really great features, like faceted browsing                and replication</str>            </arr>            <date name="creationDate">2007-01-07T05:04:00.000Z</date>            <arr name="keywords">                <str>solr,lucene,enterprise,search,greatness</str>            </arr>            <int name="rating">8</int>            <str name="title">Solr is Great</str>            <str name="url">http://localhost/myBlog/solr-rocks-again.html</str>        </doc>    </result>    <lst name="highlighting">        <lst name="http://localhost/myBlog/solr-rocks-again.html">            <arr name="content">                <str>Solr has some really great features, like <em>faceted</em>                <em>browsing</em> and replication</str>            </arr>        </lst>    </lst></response>            

 





posted @ 2012-01-19 17:02  HelloCoding  阅读(250)  评论(0编辑  收藏  举报