首先,Solr wiki的许多部分对于刚刚学习如何索引和搜索字段的人来说并不是很有用.好像是专门为专家写的!它使用了与Solr相关的术语,所以不反复阅读就很难理解它.

NOTE:我有一个分类广告网站,最新的广告总是最先出现,所以排序对我来说并不重要,除了按价格和日期排序外,用户没有其他 Select ,还有每页有多少结果.

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

同样的问题也适用于responseWriters,使用哪一个?如何配置?

关于这些操作者,我还应该知道些什么?

如何有效地使用它们?

在我了解了所有这些事情之后,我真的应该写一些关于如何将Solr实现到PHP网站上的东西.

谢谢你的帮助!

推荐答案

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

请求处理程序可以提供查询之外的功能,例如数据导入,而不是对实际的搜索查询"执行"某些操作.

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

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

对于查询,除了默认的SearchHandler之外,最常用的请求处理程序是DisMaxRequestHandler(qt=dismax),它将根据字段重要性使用不同的权重提供跨多个字段的搜索.这通常被人们称为"类似谷歌"的搜索.

此外,您可能会对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>

在本例中,qf是要应用于每个字段的字段和提升.上述配置将跨id、关键字、标题、区域、国家和城市进行搜索.有关更多信息,请查看相应的Wiki页面(适用于DisMaxRequestHandler).

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

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

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

php响应可以求值为:

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

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实际上transform基于模板(例如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可能只是个不错的 Select ,以此类推.

您可以看到,Solr是一个功能强大、用途广泛的平台:) 如果你想找到一条穿过丛林的路,你可能会想求助于某本书,比如"Solr 1.4 Enterprise Search Server"本(尽管我不确定它作为导论真的是最好的可能的工作).许多事情你可以通过反复试验、耐心和一些在线帮助来弄清楚.

希望这能让你振作起来.

Database相关问答推荐

在Prisma中建立关系

PostgreSQL 参数化 Order By / Limit in table 函数

复合主键

如何将正在使用的数据库复制到django中的其他数据库?

使用 ContentValues 和更新方法更新 sql 数据库

mysql搜索表名的段

数据库中空值(nulls)使用的空间

当可伸缩性无关紧要时,NoSQL 与 SQL

在 phpmyadmin 中导入时如何跳过重复记录

Joomla 数据库设置

返回 SQLite 数据库中表大小的查询

如何删除 SQLite 中具有多个 where 参数的行?

删除 PHP 中的所有小数

Select * 和 Select [列出每个列] 之间有区别吗

在单个 postgres 查询中多次调用 `now()` 是否总是给出相同的结果?

哪个更重要?数据库设计或编码?

如何配置 NLog 以写入数据库?

如何在 SQL Server 中创建数据库的别名

在具有所需 ForeignKey 引用的 Django (1.8) 应用程序之间移动模型

如何使用 T-SQL 检测 SQL Server 数据库的只读状态?