我需要使用Algolia PHP API从索引中获取所有方面的列表,但似乎找不到支持此kind of query的方法。
当前的Algolia PHP API是否可能?
因此,基本上是突出显示的单词的列表:
答案 0 :(得分:0)
鉴于您使用的是PHP,因此属于后端,您可以使用以下代码:
$settings = $index->getSettings();
然后在$settings['attributesForFaceting']
中获取构面。
要调用getSettings
,您需要使用已设置settings
ACL的API密钥初始化API客户端。
因此,请使用Admin API密钥或为此目的在仪表板中创建的特定密钥。
在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将超时并发回它得到的结果(注意,这是事物发生情况的基本视图)。
我没有您的项目的详细信息,但是您是否研究过instantsearch.js?
这是构建Algolia搜索体验的必备库(或其变体之一)。通过直接调用其API服务器在前端完成的所有操作,是获得快速搜索体验的最佳方法:)