使用instantsearch.js时设置初始构面/细化值

时间:2016-03-02 14:53:28

标签: algolia

我正在使用instantsearch.js和小部件组合来显示我的搜索结果(几乎完全建模在demos之后)。

我需要为构面设置一些初始值,以便默认情况下过滤某些项目。我该怎么做呢?我知道AlgoliaSearchHelper(helper)对象有一个方法toggleRefinement应该允许我这样做但是在调用执行初始查询的search.start()之前我似乎无法访问这个帮助器。

任何有关如何设置默认优化的建议或见解都将受到赞赏。感谢。

更新:这不是重复 - 我的问题似乎与instantsearch.widget.toggle有关。看起来这个小部件在初始搜索之前设置了幕后的默认值。我已调整我的代码以不使用此小部件,而只是设置searchParameters.tagFilters属性。正是切换小部件为我抛弃了一些东西,因为我无法弄清楚如何覆盖其默认过滤。

3 个答案:

答案 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.jsPR有以下更新:

  

请注意,如果您提供" off"选项,它将在初始化时进行细化。

答案 2 :(得分:0)

我的问题似乎与instantsearch.widget.toggle有关。看起来这个小部件在初始搜索之前设置了幕后的默认值。我已将我的代码调整为不使用此小部件,而只是设置searchParameters.tagFilters属性。切换小部件为我抛弃了东西,因为我无法弄清楚如何覆盖其默认过滤。