Algolia facet,tags和filtering

时间:2017-08-10 18:33:08

标签: php algolia

我正在将我的网站搜索引擎从基于Algolia的SQL转换过来。我已经对文档进行了大量查看,但我仍然不完全确定我究竟应该如何设置它。

每行有超过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, ]);

2 个答案:

答案 0 :(得分:0)

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

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

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

如果您需要这么多,可能会有很多方面。但我认为标签应该是单词,而不是数字。

答案 1 :(得分:0)

像朱利安在回答中所说,正确的做法是将它们全部设置为方面。任何仅用于过滤而不用于分面的属性应设置为仅过滤:

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

我的数字过滤器没有返回任何内容的原因是因为数据没有正确地推送到Algolia。所有数值都以字符串形式发送。所以在原帖中使用我的例子,而不是看起来像这样:

{
  ...
  "id": 1,
  ...
}
它看起来像这样:

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