Algolia 后端搜索与 Algolia 搜索助手库 Angular.js

Algolia backend search with Algolia Search Helper library for Angular.js

出于安全问题,我正计划通过后端将搜索请求发送到 Algolia。 我发现 here Instantsearch 支持此功能,您可以在其中指定自己的 customSearchClient,将其作为参数传递,然后它会向那里发送请求。

尽管 Instansearch 不支持 Angular.js,但我使用的是 Algolia Search Helper 库,它带有一些 Angular.js 的帮助程序。我想知道这是否也可能。

简而言之,我想使用 Angular.js 实现 Algolia 后端搜索,而不必担心构建搜索查询。

这就是他们在 official example

中实例化常规搜索客户端的方式
'use strict';
// First let's define the usual configuration variables for our index
var applicationId = 'latency';
var apiKey = '249078a3d4337a8231f1665ec5a44966';
var index = 'bestbuy';
var client = algoliasearch(applicationId, apiKey);

// Define the `AgoliaSearchHelper` module
angular.module('AlgoliaSearchHelper', ['ngSanitize']).

// Expose the helper
factory('helper', function() {
  return algoliasearchHelper(client, index, {
    disjunctiveFacets: ['category'],
    hitsPerPage: 7,
    maxValuesPerFacet: 3
  });
}).
...

以防万一有人在找这个。可以使用 Algolia Search Helper library as well. Github issue

定义自定义搜索客户端

您可以通过这种方式创建自定义搜索客户端并将其传递给工厂

const customSearchClient = {
  search(requests, cb) {
    return fetch('https://algolia-backend-search.herokuapp.com/search', {
      method: 'post',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ requests }),
    }).then(function(res){return res.json()}).then(cb)
  }
};

var alSH = angular.module('AlgoliaSearchHelper', ['ngSanitize']);

// Expose the helper
alSH.factory('helper', function() {
  return algoliasearchHelper(customSearchClient, index, {
    disjunctiveFacets: ['category'],
    hitsPerPage: 7,
    maxValuesPerFacet: 3
  });
});

working demo 了解更多

如果您想使用 Angular.js 库,例如 $http$q 而不是 fetch API。也有可能(确保删除 $scope.applys 否则会触发警告)- demo using $http and $q

如果你想return来自同一个工厂的多个助手来查询不同的索引也是可能的 - demo for multiple returns in factory

搜索请求将发送到后端,可以在请求正文中访问。您也可以对请求和结果进行相关修改。该部分已涵盖 here。如果您愿意,您甚至可以从后端添加索引名称,方法是在前端为索引设置一个空字符串并在后端修改搜索请求(如果您担心暴露索引名称)。