将Algolia Instantsearch.js与Autocomplete.js同步

时间:2018-01-29 21:02:28

标签: javascript autocomplete algolia instantsearch.js

我已经设置了instantsearch.js并创建了一个名为index的索引,如下所示:

{
  "cities": [
    "Boston"
  ],
  "company": "Pineapple",
  "countries": [
    "United States",
    "Canada"
  ],
  "description": "Best pineapple in the world",
  "highlight": true,
  "productTypes": [
    "Hard Drive"
  ],
  "category": "Hardware",
  "title": "Kiwi",
  "objectID": "5"
}

我还设置了autocomplete.js并创建了两个索引:locationcountry

这是location

{
  "cities": "San Francisco",
  "objectID": "91961120"
}

这是country

{
  "countries": "Germany",
  "objectID": "92132590"
}

我已经让这两个功能分开工作,但我不知道如何同步它们。

我正在寻找的行为是,用户可以在instantsearch.js的帮助下输入搜索,并使用autocomplete.js选择一个位置或国家来过滤结果。或者,用户可以使用autocomplete.js按国家/地区过滤结果。

我创建了Codepen来显示我的代码。感谢。

我知道我使用的命名惯例并不是最好的,这些会被更改。

1 个答案:

答案 0 :(得分:4)

您需要确保在主索引中将citiescountries声明为attributesForFaceting。然后,您需要在facets的初始searchParameters上添加属性instantsearch。此属性将包含您要使用的构面的名称(cities& countries)。从现在开始应该可以在您的属性上应用构面过滤器。

要同步这两个实例,您需要收听autocomplete:selected事件。您可能还需要在输入上侦听change事件,并在没有值时清除过滤器。要应用过滤器,您需要使用the helper,它是instantsearch用于管理状态的内部库。

我使用上面的更改解释了您的Codepen