首页 > 解决方案 > 使用 Algolia PHP API 获取 facets 列表

问题描述

我需要使用 Algolia PHP API 从索引中获取所有方面的列表,但似乎找不到支持这种查询的方法。

当前的 Algolia PHP API 可以做到这一点吗?

所以,基本上是突出显示的单词列表:

在此处输入图像描述

标签: phpapialgolia

解决方案


选项1

鉴于您使用的是 PHP,因此处于后端,您可以使用以下内容:

$settings = $index->getSettings();

然后,您将切面放入$settings['attributesForFaceting'].

为了能够调用,您需要使用设置了 ACLgetSettings的 API 密钥来初始化您的 API 客户端。 因此,要么使用您的 Admin API 密钥,要么使用您在仪表板中为此目的创建的特定密钥。settings

选项 2

setting您的 API 密钥上设置 ACL 通常不适用于前端搜索应用程序。

因此,对于前端实现(显然不是您的情况),该search功能就是您所需要的;可以提供一个空的搜索字符串,您可以调整查询以改善响应时间和大小:

$response = $index->search('', [
  'attributesToRetrieve' => ['objectID'], // don't retrieve full objects
  'hitsPerPage' => 0, // send back an empty page of results anyway
  'facets' => '*' // ask for all facets,
  'responseFields' => 'facets' // limit JSON response to `facets`
]);

获得该查询的响应后,您将获得包含以下内容的构面列表:

$facets = array_keys($response['facets']);

但是请注意此方法的一个警告:如果您的索引非常大,则响应可能不包含所有方面的值。
这样做的原因是,像 Algolia 这样的搜索引擎被设计为在快速的同时具有相关性,而不是被设计为在快速时详尽无遗的数据库。结果,当索引太大而无法在一定时间内“浏览”时,Algolia 将超时并发回它获得的结果(注意,这是事情如何发生的基本视图)。

选项 3

我没有您项目的详细信息,但是您是否查看了instantsearch.js
这是使用 Algolia 构建搜索体验的首选库(或其变体之一)。一切都在前端完成,直接调用他们的 API 服务器,这是获得快速搜索体验的最佳方式 :)


推荐阅读