文档
指南
过滤器

过滤器

有多种方法可以将过滤器应用于搜索结果。过滤器可以应用于

在客户端应用过滤器

可以通过在 Instantsearch 的 configure 组件上使用 filters 属性在客户端应用过滤器。

设置

要在客户端应用过滤器,您必须首先在应用程序设置中的 facet_attributesfilter_attributes 配置中设置过滤器。

以下是一个具有 facet_attributesfilter_attributes 设置的配置示例。

{
  facet_attributes: [
    { attribute: 'author', field: 'author.keyword', type: 'string' },
    { attribute: 'price', field: 'price', type: 'numeric' },
  ],
  filter_attributes: [
    { attribute: 'publisher', field: 'publisher.keyword', type: 'string' },
    { attribute: 'genre', field: 'genre.keyword', type: 'string' },
    { attribute: 'date', field: 'date.field', type: 'date' },
    { attribute: 'nestedField', field: 'price', type: 'string', nestedPath: 'nested' }
  ],
  result_attributes: [],
  search_attributes: []
}
import { Configure } from 'react-instantsearch';
 
<Configure
  filters="price:[90 TO *]"
/>

可以通过在 Instantsearch 的 configure 组件上使用 filters 属性在客户端应用过滤器。

使用 attribute 属性指定要过滤的字段。

嵌套字段在 filters 属性中不受支持。要过滤嵌套字段,请使用 facetFiltersnumericFilters 属性。

过滤器语法

数字和分面过滤器

数字和分面过滤器通常由小部件使用。

您还可以通过在 Instantsearch 的 configure 组件上使用 numericFiltersfacetFilters 属性将数字过滤器或分面过滤器添加到搜索中。

import { Configure } from 'react-instantsearch';
 
<Configure
  facetFilters={["author:John"]}
  numericFilters={["price>10", "price<20"]}
/>

在服务器上应用过滤器

可以通过在 handleRequest 函数中使用 getBaseFilters 函数在服务器上应用过滤器。

示例可能包括

  • 过滤掉未发布的文档
  • 过滤掉用户无权访问的文档

以下是如何过滤掉未发布的文档的示例。

属性不能在 getBaseFilters 函数中使用。您必须改为使用 field 属性。这是因为 field 属性是 Elasticsearch 中的实际字段名称。

该函数必须返回一个过滤器数组。每个过滤器都是一个对象,遵循Elasticsearch 查询 DSL(在新标签页中打开)

以下是用status 字段过滤未发布文档的示例。

const results = await apiClient.handleRequest(req.body, {
  getBaseFilters: () => {
    return [
      {
        bool: {
          must: {
            term: {
              status: "published",
            },
          },
        },
      },
    ];
  },
});

Apache 2.0 2024 © Joseph McElroy。
需要帮助?加入 Discord