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

2019-03-27 01:10|来源: 网路

索引操作

在 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 查询语法与 Lucene QueryParser  支持的查询语法相同,只是前者加入了一些排序支持。示例应用程序对输入的值几乎没有进行验证,而且没有演示如查询增强、短语、范围筛选等功能,所有这些功能在 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>            

 






转自:http://www.cnblogs.com/HelloCoding/archive/2012/01/19/2327512

相关问答

更多
  • 使用多线程,下面的代码,简单实现一个多线程的web服务器: #coding=utf-8 import socket import threading from time import sleep def response(sock, addr): print "收到请求" data = sock.recv(1024) print data sock.send(html) sock.close() html = '''HTTP/1.1 200 OK\nContent-Type: text/html\n\r\n ...
  • 我懂了! 我需要在http:// drupal_learning / admin / config / search / search_api / server / drupal_learning / edit中更改Solr路径 / Solr的 至 / Solr的/ drupal_learning I've got it! I needed to change Solr path in http://drupal_learning/admin/config/search/search_api/server/ ...
  • 我希望你想要双向复制的主要原因是支持跨数据中心的情况。 也就是说,您希望将查询隔离到特定位置,但要在高延迟链接中保持同步。 如果您不需要这个,只需使用SolrCloud并让它处理复制。 您可以对索引进行分片并获得所需的更新吞吐量。 任何更新都可以转到任何节点,Solr会确保将其写入正确的位置。 如果您真的在考虑数据中心,Solr在6.0中添加了一些全新的数据中心支持,您可以在这里阅读: https : //sematext.com/blog/2016/04/20/solr-6-datacenter-repl ...
  • 我已经使用Solr近2年了,从来没有使用过Sphinx,所以我显然有偏见。 但是,我会尝试通过引用文档或其他人来保持目标。 我也会补丁到我的答案:-) 相似点: Solr和Sphinx都满足您的所有要求。 它们很快,旨在有效地索引和搜索大量的数据。 两者都有长列表的高流量网站使用它们( Solr , 狮身人面像 ) 两者都提供商业支持。 ( 索尔 , 狮身人面像 ) 两者都为几种平台/语言提供客户端API绑定( Sphinx , Solr ) 两者都可以分配来提高速度和容量( Sphinx , Solr ) ...
  • 好的,你找到了你的Solr home,这就是你的solr.xml文件所在的位置。 你的solr实例就在那之下。 你想要找到的是谁指着那个家。 指向solr.home的变量是solr.solr.home 。 你可能还记得,如果你做Solr教程。 因此,我建议使用“solr.solr.home”(是的,“solr”是两次)来对文件系统进行grepping(可能以/ etc开头,/ var / logs,然后是其余部分)。 那应该给你指向Solr的配置文件。 从该文件的位置/格式,您可以确定它是Tomcat还是J ...
  • 从4.0开始,它用于原子文档更新和实时获取。 如果您不使用这些功能,则可以禁用它们。 原子文档更新允许您更新字段而不发送整个文档。 例如,您可以拥有一个文档视图计数器,您希望在每次查看文档时增加该计数器: [{“id”:“doc1234543”,“viewcount”:{“inc”:1}}] 这样效率更高。 实时获取允许您在执行提交之前将文档添加到索引后立即查看文档,这样做成本很高。 如果您将Solr用作NoSQL数据存储,这将非常有用。 这里有更多信息: https : //cwiki.apache.or ...
  • 是的,应该可以使用WSO2 DAS 3.0.1,因为它使用的是solr 5.2.1。 您可以完全按照上面提到的步骤为DAS启用它。 Yes it should be possible to do with WSO2 DAS 3.0.1, as it is using solr 5.2.1. You can exactly follow the steps mentioned in above post to enable it for DAS.
  • 不知道SOLR是如何工作的,但正确的jQuery将是: $.ajax({ type: "GET", url: "http://127.0.0.1:8080/solr/select?q=iphon&wt=json&json.wrf=?", dataType: "json", success: function (result) { // is working }, error: function (result) { // pro ...
  • 尝试使用SolrQuery对象而不是ModifiableSolrParams。 也许它会有所帮助。 如果您因任何原因无法使用SolrQuery,请尝试使用静态名称,例如“CommonParams.Q”而不是像“?q”这样的硬编码名称。 EDITED 我测试了您的问题,我认为您的Application Server缺少配置。 你在使用JBoss 7.1吗? 您需要在.standalone.sh或standalone.bat中添加一行,告诉solr在哪里。 例如,在Jboss 7.1中,在默认配置中,您必须向s ...
  • 在这里阅读更多关于SolrCloud的信息..! https://wiki.apache.org/solr/SolrCloud 从我的经验中得到几点意见。 如果您的应用程序只是从SOLR读取数据并且没有写入SOLR(实时但您使用ETL进行索引),那么您可以选择Master Slave层次结构。 定义一个Master: - 将所有写入指向此处。 如果此主服务器关闭,您将无法再索引数据 创建2个(或更多)Slaves: - 这是SOLR的一个功能,它将根据我们指定的时间间隔(从每20秒说一次)来处理来自主服务器 ...