我正在使用instantsearch.js和小部件组合来显示我的搜索结果(几乎完全建模在demos之后)。
我需要为构面设置一些初始值,以便默认情况下过滤某些项目。我该怎么做呢?我知道AlgoliaSearchHelper(helper)对象有一个方法toggleRefinement应该允许我这样做但是在调用执行初始查询的search.start()之前我似乎无法访问这个帮助器。
任何有关如何设置默认优化的建议或见解都将受到赞赏。感谢。
更新:这不是重复 - 我的问题似乎与instantsearch.widget.toggle有关。看起来这个小部件在初始搜索之前设置了幕后的默认值。我已调整我的代码以不使用此小部件,而只是设置searchParameters.tagFilters属性。正是切换小部件为我抛弃了一些东西,因为我无法弄清楚如何覆盖其默认过滤。
答案 0 :(得分:4)
向instantsearch.js实例添加初始过滤器的最简单方法是使用额外的自定义小部件:
var search = instantsearch({
appId: 'YourApplicationID',
apiKey: 'YourSearchOnlyAPIKey',
indexName: 'YourIndexName'
});
search.addWidget(
instantsearch.widgets.searchBox({
container: '#search-box',
placeholder: 'Search for FIXME...'
})
);
search.addWidget(
instantsearch.widgets.hits({
container: '#hits-container',
templates: {
item: 'Hit {{objectID}}: FIXME'
}
})
);
// setup initial filters
search.addWidget({
init: function(options) {
// use options.helper (https://github.com/algolia/algoliasearch-helper-js) to initialize the search with custom filters & parameters
options.helper.addFacetRefinement('MyFacet', 'my value');
}
});
search.start();
答案 1 :(得分:3)
你确实是对的,切换小部件uses the off
value if provided:
if (userValues.off === undefined) {
return;
}
// Add filtering on the 'off' value if set
let isRefined = state.isFacetRefined(attributeName, userValues.on);
if (!isRefined) {
helper.addFacetRefinement(attributeName, userValues.off);
}
为避免其他用户不理解,现在instantsearch.js
上PR有以下更新:
请注意,如果您提供" off"选项,它将在初始化时进行细化。
答案 2 :(得分:0)
我的问题似乎与instantsearch.widget.toggle有关。看起来这个小部件在初始搜索之前设置了幕后的默认值。我已将我的代码调整为不使用此小部件,而只是设置searchParameters.tagFilters属性。切换小部件为我抛弃了东西,因为我无法弄清楚如何覆盖其默认过滤。