阿尔戈利亚刻面、标签和过滤



我正在将我网站的搜索引擎从基于 SQL 切换到基于 Algolia。我已经浏览了很多文档,但我仍然不完全确定我是否确切地理解应该如何设置它。

每行有 100 多列,这意味着 Algolia 中每个项目的 100 多个参数。其中至少有一半用于以一种或另一种方式进行过滤。记录可能如下所示:

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

用户应搜索多个字段,例如"制造商"、"品牌"和"说明"。这些字段也需要按以下方式进行过滤,例如brand = 'Abcd'.我的理解是,这是何时应该使用Facets的完美示例。

但是像 id、已批准或状态之类的东西呢?这些不是需要搜索的字段,对我来说,它们似乎不是 Facets 的良好用途。然而,这似乎是我可以使用它们进行过滤的唯一方法之一。我只是应该有 50+ 个方面吗?

还是应该_tags这些?㞖。。。如何向标签添加任何内容?我在仪表板中找不到任何方法,在 PHP 文档中也找不到任何内容。

既然是数字属性,那么这三个不应该是可搜索的吗?文档指出,字段必须是 Facet 才能进行筛选,除非它是数字。然而,以下搜索结果为空:

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

就像朱利安在回应中所说的那样,正确的做法是将它们全部设置为分面。任何仅用于筛选而不用于分面的属性都应设置为仅筛选:

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

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

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

它看起来像这样:

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

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

关于最新示例,必须在仪表板中将每个分面筛选器设置为"属性ForFacets"。

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

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

最新更新