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",
...
}
我正在将我网站的搜索引擎从基于 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",
...
}