Java 有人能详细解释SOLR请求处理程序和响应编写器吗?

Java 有人能详细解释SOLR请求处理程序和响应编写器吗?,java,php,sql,mysql,database,Java,Php,Sql,Mysql,Database,首先,SolrWiki的许多部分对于刚学会如何索引和搜索字段的人来说不是很有用。看来是专为专家写的!它使用与solr相关的术语,因此如果不反复阅读,就很难理解它 注意:我有一个分类广告网站,其中最新的广告总是首先出现,因此排序与我无关,除了按价格和日期排序之外,没有其他选项可供用户选择,以及每页有多少结果 我知道,requestHandler是一种“对查询做一些事情”的方法,对吗? 但如何知道使用哪个处理器对我来说很难。以及如何配置一个。 我只知道处理程序是在查询字符串中指定的,如“qt=my_

首先,SolrWiki的许多部分对于刚学会如何索引和搜索字段的人来说不是很有用。看来是专为专家写的!它使用与solr相关的术语,因此如果不反复阅读,就很难理解它

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

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

同样,同样的问题也适用于
响应编写者
,使用哪一个?如何配置

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

如何有效地使用它们

在我了解了所有这些之后,我真的应该写一些关于将solr实现到PHP网站中的东西


谢谢你的帮助

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

请求处理程序可以提供查询以外的功能,比如数据导入,而不是对实际的搜索查询“做”一些事情

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

使用什么处理程序,通常取决于您想要实现什么。我建议您查看提供的处理程序列表,并将它们的描述(许多都有Wiki页面)与您想要做的事情相匹配

对于查询,除了默认的SearchHandler之外,最常用的请求处理程序是DisaxRequestHandler(qt=dismax),它基本上会根据字段重要性使用不同的权重跨多个字段进行搜索。这通常被人们称为“谷歌式”搜索

此外,您可能会对MoreLikeThishHandler感兴趣,它旨在提供类似于特定文档的点击率(例如,以前的搜索结果)

请注意,新版本的Solr中的DisMaxRequestHandler实际上是由默认的SearchHandler提供的,查询类型为dismax,这是一个混乱的来源

处理程序在solrconfig.xml中配置:

phps响应可以通过PHP的序列化机制读取:

$serializedResult = file_get_contents('http://localhost:8983/solr/select?q=iPod&wt=phps');
$result = unserialize($serializedResult);
print_r($result);
还有对其他软件(如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"/>

使用它们的最有效方式取决于您的环境和您想要实现的目标。显然,如果您使用的是PHP,phps可能会提供更好的(通过该语言轻松访问)和更快的(内置序列化机制,不太冗长)结果。如果使用Javascript,json可能只是一种方式,等等

你看,SOLR是一个功能强大、用途广泛的平台:) 如果你想在丛林中找到一条路,你可能会想读一些书,比如(尽管我不确定它是否真的是最好的介绍)。通过反复试验、耐心和一些在线帮助,你可以最好地解决很多问题


希望这有助于您的行动。

回答得很好。您能否解释一下
defType
echoParams
?@cuh:请再提出一个问题。
$serializedResult = file_get_contents('http://localhost:8983/solr/select?q=iPod&wt=phps');
$result = unserialize($serializedResult);
print_r($result);
<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"/>