使用InstantSearch.js排除过滤器?

时间:2017-01-09 19:16:55

标签: algolia

我们正在使用Algolia来索引来自各种来源和十几种不同产品的内容。现在我有一个索引,产品是一个已配置的方面。

我需要找到一种方法来限制只搜索用户拥有的产品。

我使用的是InstantSearch库,我一直在阅读文档和各种在线论坛,了解如何实现这一目标。

以下是我试图开始工作的代码。

var client = algoliasearch("myAppId", "myApiKey")
var index = client.initIndex('myIndex');

var search = instantsearch({
appId: 'myAppId',
apiKey: 'myApiKey',
indexName: 'myIndex',
urlSync: {},
attributesToHighlight: 'full'
});

search.addWidget(
instantsearch.widgets.refinementList({
container: '#products',
attributeName: 'products',
operator: 'or',
limit: 100,
sortBy: ['name:asc'],
templates: {
}
})
);

search.addWidget({
init: function (options) {
    options.helper.addFacetRefinement('products', 'Product A');
}
});

search.start();

但是当我执行此操作时,我收到一条错误声明"未捕获错误:产品未在帮助程序配置的facets属性中定义"。

我错过了什么步骤?或者我是以错误的方式接近这个?

任何指导意见。

~Greg

1 个答案:

答案 0 :(得分:1)

我找到了满足我需求的答案。我必须在instantsearch配置调用中添加searchParameters选项。我必须编写一些代码来隐藏我的精简列表小部件中不需要的产品。

第一步是创建一个我想隐藏的产品数组。

var productsToExclude = ['product-a','product-b'];

我必须通过" searchParameters"传递此项目列表以隐藏instantsearch配置选项。

var search = instantsearch({
appId: 'myAppId',
apiKey: 'myApiKey',
indexName: 'myIndex',
urlSync: {},
attributesToHighlight: 'full',
searchParameters: { facetsExcludes: { "products": productsToExclude}}
});

我还必须编写一些代码来隐藏refinementList小部件中的项目。

var onRenderHandler = function () {
for (var p in productsToExclude) {
$("input[type=checkbox][value='" + productsToExclude[p] + "']").parent().hide();
}
};
search.on('render', onRenderHandler);