使用InstantSearch.js排除过滤器?
问题描述:
我们使用Algolia来索引各种来源和十几种不同产品的内容。现在我有一个索引,产品是一个配置的方面。使用InstantSearch.js排除过滤器?
我需要找到一种方法来将搜索仅限于用户拥有的产品。
我正在使用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();
但是,当我执行此我得到一个错误,指出“未捕获的错误:产品未在辅助配置的方面属性定义”。
我错过了什么步骤?或者我以错误的方式处理这个问题?
任何指导赞赏。
〜Greg
答
我找到了我的需求的答案。我不得不在searchsearch配置调用中添加一个searchParameters选项。我必须编写一些代码来隐藏我的精简列表小部件中的不需要的产品。
第一步是创建一个我想要隐藏的产品的数组。
var productsToExclude = ['product-a','product-b'];
我不得不通过“searchParameters”即时搜索配置选项来隐藏项目列表。
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);