使用Algolia PHP API获取构面列表

时间:2019-05-03 08:34:15

标签: php api algolia

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

当前的Algolia PHP API是否可能?

因此,基本上是突出显示的单词的列表:

enter image description here

1 个答案:

答案 0 :(得分:0)

选项1

鉴于您使用的是PHP,因此属于后端,您可以使用以下代码:

$settings = $index->getSettings();

然后在$settings['attributesForFaceting']中获取构面。

要调用getSettings,您需要使用已设置settings ACL的API密钥初始化API客户端。
因此,请使用Admin API密钥或为此目的在仪表板中创建的特定密钥。

选项2

在API密钥上设置setting 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服务器在前端完成的所有操作,是获得快速搜索体验的最佳方法:)