Apache Solr 分面

17 Mar 2025 | 6 分钟阅读

分面是 Solr 最有用的功能之一。 当我们将其与传统数据库和 NoSQL 数据存储进行比较时。 分面搜索,也称为分面导航或分面浏览,允许用户查看其搜索结果的高级细分,这些结果基于其文档的一个或多个方面运行搜索。 它允许我们选择过滤器以深入了解这些搜索结果。

分面是指对搜索结果进行多种不同类别的分类。

分面类型

查询分面 - 查询分面返回当前搜索结果中也匹配给定查询的文档数量。

日期分面 - 它提供了属于特定日期范围内的文档数量。

分面查询示例

使用字段分面,我们可以获取所有术语的计数器,或者我们只能获取任何给定字段中的前几个术语。

例如,让我们以包含有关不同好书的数据的 books.csv 文件为例。

使用 post 工具,我们将把这个文件发布到 Apache Solr 中。

当我们执行上述命令时,给定 .csv 文件中提到的所有文档都将被发送到 Solr。

现在,我们将在字段 author 上执行一个分面查询,在集合 my_core 上使用行值 0。

打开 Solr 的 Web 用户界面,在网页的左侧,单击复选框分面,如下图所示。

Apache Solr Faceting

单击复选框后,我们将有三个不同的文本字段来传递分面搜索的参数。 之后,将以下值作为查询的参数传递。


Apache Solr Faceting

最后,通过单击执行查询按钮执行查询。

Apache Solr Faceting

它根据作者对索引中的文件进行分类,并定义作者贡献的书籍数量。

使用 Java 客户端 API 进行分面

下面是用于将文档添加到 Solr 索引的 Java 代码。 将此代码保存在名为 Hitlighting.java 的文件中。

通过在终端中执行以下命令来编译上述代码

当我们编译并运行上述命令时,我们将得到如下所示的输出。

Apache Solr Faceting

字段分面

最常用的分面形式是字段分面。 当我们搜索时,将请求在特定字段中找到的唯一值以及找到它们的文档数量。 我们将使用餐厅示例直观地演示几个字段分面的使用。 在餐厅类型字段、州字段和城市字段上进行分面。

让我们开始运行我们的第一个分面

结果查询将出现在此列表中

上面的示例演示了 Solr 中分面的基础,即,在单值字段上的字段分面。 在这种分面中会检查所有唯一值,并计算检索指定值的文件数量。

查询分面

查询分面可用于获取任意子查询的计数,因此我们得到可能匹配未来搜索的结果,并提供基于数量的分析。 Apache 通过其查询分面的实现提供了这种能力。 表达此功能的最佳方法是通过一个示例。

上面的示例演示了在 Solr 中查找子查询的搜索结果计数的蛮力方法。 它将每个子查询作为单独的搜索运行,并查看找到了多少输出。

运行查询分面以获取子查询的文档计数。

不同的子查询将通过使用查询分面在单个请求中组合到 Apache Solr 中。 基于多个价格范围的查询分面

查询

结果

上面的示例演示了查询分面,这些分面将在任何 Solr 查询中有效地用于在查询时创建新的信息桶。 我们可以很容易地在 Solr 中创建一个新字段,称为 price_range,它具有这些桶化的值中的每一个。

范围分面

范围分面提供了将日期和数字字段值分桶成范围的能力。 该范围作为分面从 Solr 返回。 这可以特别用作创建许多不同查询分面以表示多个值范围的替代方案。

价格字段上的示例范围分面

查询

结果

上述示例的输出类似于前一个结果,但有两个显着的例外。

  • 范围分面返回分面的每个范围的计数。range.start。
  • 查询上的范围.end 参数,即使那些范围不包含任何文档。

将过滤器应用于您的分面

在最基本的层面上,当我们将过滤器应用于分面时,它并不比在我们的查询中添加一个额外的过滤器(fq 参数)更难。 如果我们想使用我们的搜索返回三个分面 -

  • 州字段上的字段分面。
  • 城市字段上的字段分面。
  • 价格字段上的查询分面。

初始查询和结果将类似于下一个列表。

查询

结果


下一主题#