Algolia 分面、标签和过滤

Algolia facets, tags, and filtering

我正在将我网站的搜索引擎从基于 SQL 的搜索引擎更改为基于 Algolia 的搜索引擎。我已经仔细阅读了文档,但我仍然不确定我是否完全理解应该如何设置它。

每行有超过 100 列,这转化为 Algolia 中每个项目的 100 多个参数。其中至少有一半用于以某种方式进行过滤。一条记录可能看起来像这样:

{
  "id":"1",
  "Manufacturer": "Abcd",
  "Brand": "Efgh",
  "Description": "This is a description",
  "approved": "1",
  "status": "2",
  ...
}

用户应该可以搜索多个字段,例如制造商、品牌和描述。这些字段也需要过滤,例如 brand = 'Abcd'。据我了解,这是何时应使用 Facets 的完美示例。

但是像 id、approved 或 status 这样的东西呢?这些不是需要搜索的字段,对我来说,它们似乎不太适合 Facets。然而,这似乎是我可以使用它们进行过滤的唯一方法之一。我应该有 50 多个面吗?

或者那些应该是 _tags?如果是这样...我如何向标签添加任何内容?我在仪表板中找不到任何这样做的方法,我在 PHP 文档中也找不到任何内容。

而且这三个属性不应该是可搜索的吗,因为它们是数字属性?文档指出字段必须是 Facet 才能过滤,除非它是数字。然而,以下搜索结果为空:

$res = $index->search('', ['filters' => 'id = 1', 'hitsPerPage' => 15, ]);

我不明白已批准或状态等属性的问题?您想将它们用作过滤器还是不需要它们?过滤器和构面相同。

关于最新的示例,每个方面过滤器都必须在仪表板中设置为 "attributesForFacets"。

如果您的 ID 是唯一的,您可以将其映射到 objectID,以便更容易访问。 ID 应该不是分面。

如果您需要那么多方面,也可以有很多方面。但是我觉得标签应该是文字,而不是数字。

正如 Julien 在回复中所说,正确的做法是将它们全部设置为分面。任何仅用于过滤而不用于分面的属性都应设置为仅过滤:

$index->setSettings([
  'attributesForFaceting' => [
    'filterOnly(approved)'
  ]
]);

我的数字过滤器没有返回任何内容的原因是数据没有正确推送到 Algolia。所有数值都作为字符串发送。所以在原始 post 中使用我的示例,而不是像这样:

{
  ...
  "id": 1,
  ...
}

看起来像这样:

{
  ...
  "id": "1",
  ...
}