我们正在使用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
答案 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);