使用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);