有人可以详细解释SOLR requestHandlers和responseWriters吗?

28 php java mysql sql database

首先,solr wiki的许多部分对于刚学会索引和搜索字段的人来说并不是很有用.它似乎是专家写的!它使用与solr相关的术语,因此如果不多次读取它就很难理解它.

注意:我有一个分类广告网站,其中最新的广告总是首先出现,所以排序与我无关,除了对价格和日期排序没有其他选项可用于用户,以及每页有多少结果.

我知道一种requestHandler方法是"对查询做一些事情"对吗?但是如何知道使用哪个处理程序对我来说很难.以及如何配置一个.我所知道的是处理程序在查询字符串中指定,如" qt=my_handler".

此外,同样的问题适用于responseWriters哪些?如何配置?

关于这些处理程序我还应该知道什么?

如何使用它们的好方法?

在我学完所有这些东西之后,我真的应该写一些关于将solr实现到PHP网站的内容.

感谢你的帮助!

Die*_*ter 52

在Solr中,RequestHandler本质上是一个插件(逻辑模块),以特定方式处理传入请求.

请求处理程序可以提供超出查询的功能,例如数据导入,而不是将某些内容"执行"到实际搜索查询.

通常,Solr中的请求处理程序被配置为特定端点(即URL),而不是通过qt参数选择.但是,搜索特定处理程序可以使用查询类型参数以特定方式处理查询(即,一个处理程序可能能够处理各种查询类型).

使用什么处理程序通常取决于您想要实现的目标.我建议您查看提供的处理程序列表,并将它们的描述(许多具有Wiki页面)与您想要执行的操作相匹配.

对于除默认SearchHandler之外的查询,最常用的请求处理程序是DisMaxRequestHandler(qt = dismax),它基本上使用基于字段重要性的不同加权提供跨多个字段的搜索.这通常被人们称为"Google like"搜索.

此外,您可能有兴趣查看MoreLikeThisHandler,它旨在提供与特定文档类似的匹配(例如,来自先前的搜索结果).

请注意,作为混淆的来源,较新版本的Solr中的DisMaxRequestHandler实际上是由默认的SearchHandler提供的,其查询类型为dismax.

处理程序在solrconfig.xml配置:

<requestHandler name="dismax" class="solr.SearchHandler" >
<lst name="defaults">
 <str name="defType">dismax</str>
 <str name="echoParams">explicit</str>
 <float name="tie">0.01</float>
 <str name="qf">
    id^10.0 keyword^1.5 title^1.0 region^0.5 country^0.5 city^0.5
 </str>
 <str name="pf">
    keyword^1.5 title^1.0 region^0.5 country^0.5 city^0.5
 </str>
 <str name="bf">
 </str>
 <str name="mm">
    2&lt;-1 5&lt;-2 6&lt;90%
 </str>
 <int name="ps">100</int>
 <str name="q.alt">*:*</str>

 <!-- example highlighter config, enable per-query with hl=true -->
 <str name="hl.fl">text features name</str>
 <!-- for this field, we want no fragmenting, just highlighting -->
 <str name="f.name.hl.fragsize">0</str>
 <!-- instructs Solr to return the field itself if no query terms are
      found -->
 <str name="f.name.hl.alternateField">name</str>
 <str name="f.text.hl.fragmenter">regex</str> <!-- defined below -->
</lst>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,qf是要应用于每个字段的字段和提升.以上配置将搜索ID,关键字,标题,区域,国家和城市.查看相应的Wiki页面以获取更多信息(DisMaxRequestHandler适用).

使用它们的最有效方法当然是首先要知道您想要实现什么,然后根据处理程序找到最佳匹配,然后调整配置以提供您和社区期望的结果.

响应编写器是插件(逻辑模块),它将提供以特定格式编写响应的方法和手段.目前,这个概念主要适用于搜索,在这些搜索中,您将处理QueryResponseWriter的衍生物,而这些衍生物又将由响应格式参数wt(在查询中)选择.

如果您正在使用PHP,那么您肯定会对使用wt = phpwt = phps生成对您的请求的PHP友好响应感兴趣.

PHP的响应可以evaled:

$code = file_get_contents('http://localhost:8983/solr/select?q=iPod&wt=php');
eval("\$result = " . $code . ";");
print_r($result);
Run Code Online (Sandbox Code Playgroud)

并且可以使用PHP的序列化机制读取phps响应:

$serializedResult = file_get_contents('http://localhost:8983/solr/select?q=iPod&wt=phps');
$result = unserialize($serializedResult);
print_r($result);
Run Code Online (Sandbox Code Playgroud)

支持其他人(如Ruby,Python,Java Binary等),它们本质上是为了使开发人员能够更容易地使用比解析XML或JSON更快的机制将SOLR集成到他们的Web应用程序中.

但是,还有其他类型的ResponseWriter实际上基于模板(例如Velocity)或变换(例如XSLT)转换响应.这在某些情况下非常有用,在这种情况下,您不希望依赖其他应用程序来处理查询结果(例如,XSLT直接进入XHTML).

响应编写器也在solrconfig.xml中配置,通常您将启用您感兴趣的那些,例如:

<queryResponseWriter name="xml" class="org.apache.solr.request.XMLResponseWriter" default="true"/>
<queryResponseWriter name="json" class="org.apache.solr.request.JSONResponseWriter"/>
<queryResponseWriter name="php" class="org.apache.solr.request.PHPResponseWriter"/>
<queryResponseWriter name="phps" class="org.apache.solr.request.PHPSerializedResponseWriter"/>
Run Code Online (Sandbox Code Playgroud)

使用它们的最有效方法取决于您的环境和您想要实现的目标.显然,如果你使用PHP,那么phps可能会让你更好(通过语言轻松访问)和更快(内置序列化机制,更简洁)的结果.如果在Javascript中,json可能只是去的方式等.

你看,SOLR是一个功能强大且功能多样的平台:)如果你想通过丛林找路,你可能想借助一些书,比如"Solr 1.4企业级搜索服务器"(虽然我不确定它真的做得最好可能的工作作为介绍).很多事情你可以通过反复试验以及耐心和一些在线帮助来解决.

希望这有助于你前进.

  • stackoverflow的力量!!!!! 然后在原始网站上找到更好的文档:) (2认同)