使用 instantsearch.js 时设置初始 facet/refinement 值
setting initial facet/refinement values when using instantsearch.js
我正在使用 instantsearch.js 和小部件组合来显示我的搜索结果(几乎完全按照 demos 建模)。
我需要为构面设置一些初始值,以便默认过滤某些项目。我该怎么做呢?我知道 AlgoliaSearchHelper(助手)对象有一个方法 toggleRefinement 应该允许我这样做但是我似乎无法在调用执行初始查询的 search.start() 之前访问这个助手。
任何关于如何设置一些默认优化的建议或见解将不胜感激。谢谢
更新: 这不是重复项 - 我的问题似乎与 instantsearch.widget.toggle 有关。看起来这个小部件在初始搜索之前在幕后设置了默认值。我已经调整我的代码以不使用此小部件,而是只设置 searchParameters.tagFilters 属性。这是切换小部件对我造成的影响,因为我不知道如何覆盖它的默认过滤。
我的问题似乎与 instantsearch.widget.toggle 有关。看起来这个小部件在初始搜索之前在幕后设置了默认值。我已经调整我的代码以不使用此小部件,而是只设置 searchParameters.tagFilters 属性。这是切换小部件对我造成的影响,因为我不知道如何覆盖它的默认过滤。
你确实是对的,在切换小部件的幕后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 更新如下:
Note that if you provide an "off" option, it will be refined at initialization.
向 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();
我正在使用 instantsearch.js 和小部件组合来显示我的搜索结果(几乎完全按照 demos 建模)。
我需要为构面设置一些初始值,以便默认过滤某些项目。我该怎么做呢?我知道 AlgoliaSearchHelper(助手)对象有一个方法 toggleRefinement 应该允许我这样做但是我似乎无法在调用执行初始查询的 search.start() 之前访问这个助手。
任何关于如何设置一些默认优化的建议或见解将不胜感激。谢谢
更新: 这不是重复项 - 我的问题似乎与 instantsearch.widget.toggle 有关。看起来这个小部件在初始搜索之前在幕后设置了默认值。我已经调整我的代码以不使用此小部件,而是只设置 searchParameters.tagFilters 属性。这是切换小部件对我造成的影响,因为我不知道如何覆盖它的默认过滤。
我的问题似乎与 instantsearch.widget.toggle 有关。看起来这个小部件在初始搜索之前在幕后设置了默认值。我已经调整我的代码以不使用此小部件,而是只设置 searchParameters.tagFilters 属性。这是切换小部件对我造成的影响,因为我不知道如何覆盖它的默认过滤。
你确实是对的,在切换小部件的幕后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 更新如下:
Note that if you provide an "off" option, it will be refined at initialization.
向 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();