在 Solr 中搜索

Solr 为搜索提供了丰富灵活的功能集。为了理解这种灵活性的程度,从概述 Solr 搜索涉及的步骤和组件开始是有帮助的。

当用户在 Solr 中运行搜索时,搜索查询将由请求处理程序处理。请求处理程序是 Solr 插件,它定义了 Solr 处理请求时要使用的逻辑。Solr 支持各种请求处理程序。有些设计用于处理搜索查询,而另一些则管理诸如索引复制之类的任务。

搜索应用程序默认选择特定的请求处理程序。此外,可以将应用程序配置为允许用户覆盖默认选择,以偏好不同的请求处理程序。

为了处理搜索查询,请求处理程序调用查询解析器,它解释查询的术语和参数。不同的查询解析器支持不同的语法。Solr 的默认查询解析器称为标准查询解析器,或更常见的是“lucene”查询解析器。Solr 还包括DisMax 查询解析器扩展 DisMax (eDisMax) 查询解析器

标准查询解析器的语法支持更精确的搜索,但 DisMax 查询解析器对错误的容忍度更高。DisMax 查询解析器旨在提供类似于 Google 等流行搜索引擎的体验,这些搜索引擎很少向用户显示语法错误。扩展 DisMax 查询解析器是 DisMax 的改进版本,它处理完整的 Lucene 查询语法,同时仍然容忍语法错误。它还包括几个附加功能。

此外,还有 通用查询参数,所有查询解析器都接受这些参数。

查询解析器的输入可以包括

  • 搜索字符串---即在索引中搜索的词语

  • 用于微调查询的参数,通过提高特定字符串或字段的重要性,通过在搜索词语之间应用布尔逻辑或通过从搜索结果中排除内容来实现

  • 用于控制查询响应显示的参数,例如指定结果显示的顺序或将响应限制为搜索应用程序架构的特定字段。

搜索参数还可以指定筛选查询。作为搜索响应的一部分,筛选查询针对整个索引运行查询并缓存结果。由于 Solr 为筛选查询分配了单独的缓存,因此对筛选查询的策略性使用可以提高搜索性能。

尽管名称相似,但查询筛选器与分析筛选器无关。筛选查询在搜索时针对索引中已有的数据执行查询,而分析筛选器(例如标记器)则按照指定规则解析内容以进行索引。

搜索查询可以请求在搜索响应中突出显示某些词语;也就是说,选定的词语将显示在彩色框中,以便在搜索结果屏幕上“跳出”。突出显示 可以更轻松地在搜索中返回的长文档中找到相关段落。Solr 支持多词语突出显示。Solr 包含一组丰富的搜索参数,用于控制词语的突出显示方式。

还可以将搜索响应配置为包括包含突出显示文本的摘要(文档摘录)。

为了帮助用户找到他们正在寻找的内容,Solr 支持两种特殊的分组搜索结果的方式,以帮助进一步探索:分面搜索和聚类。

分面搜索是一种将搜索结果按类别(基于索引术语)排列的方式。在每个类别中,Solr 会报告相关术语的命中次数,称为分面约束。分面搜索使用户可以轻松浏览电影网站和产品评论网站等网站上的搜索结果,这些网站中有许多类别和每个类别中的许多项目。

下面的屏幕截图显示了 CNET 网站(CBS Interactive Inc.)的分面搜索示例,该网站是第一个使用 Solr 的网站。

image

分面搜索使用在搜索应用程序编制索引时定义的字段。在上面的示例中,这些字段包括用于描述数码相机的有用信息类别:制造商、分辨率和变焦范围。

聚类按在执行搜索时发现的相似性对搜索结果进行分组,而不是在编制内容索引时进行分组。聚类结果通常缺少分面搜索结果中发现的清晰的层次结构,但聚类仍然很有用。它可以揭示搜索结果之间意外的共性,并且可以帮助用户排除与他们真正搜索的内容无关的内容。

Solr 还支持一项称为 MoreLikeThis 的功能,该功能使用户可以提交新的查询,重点关注较早查询中返回的特定术语。MoreLikeThis 查询可以使用分面搜索或聚类为用户提供额外的帮助。

一个称为 响应编写器 的 Solr 组件管理查询响应的最终呈现。Solr 包含各种响应编写器,包括 XML 响应编写器JSON 响应编写器

下图总结了搜索过程的一些关键元素。

image