如果您有 2 个不同的搜索栏用于 2 个不同的索引,如何配置 Algolia InstantSearch class?

How to configure the Algolia InstantSearch class if you have 2 different search bars for 2 distinct indexes?

我正在使用 Algolia 中的 InstantSearch,它基本上是您配置并绑定到搜索栏(小部件)的单例。 问题是在他们的演示中,InstantSearch class 是一个 Singleton,因此不能多次实例化。但是,它可以配置多次,但随后会更改整个应用程序的配置。

InstantSearch.shared.configure(
                    appID: algoliaAppID,
                    apiKey: key,
                    index: algoliaUserIndex
                )

他们提供的一个解决方案是多索引搜索,但它是索引的聚合,而在我的情况下,我只想进行不同的孤立搜索。

多指标参考:

let searcherIds = [SearcherId(index: algoliaUserIndex),
                                   SearcherId(index: algoliaMessageSessionsIndex)]

InstantSearch.shared.configure(appID: algoliaAppID, 
                               apiKey: key, 
                               searcherIds: searcherIds)

所以,我的问题是: 如何让两个不同的搜索栏分别搜索不同的索引?

通过查看他们的 code 您可以通过提供必填字段使用他们方便的 init 方法获得另一个 InstantSearch 实例。以下是他们提供的四种初始化方法:

/// Create a new InstantSearch reference with the given configurations.
///
/// - parameter appID: the Algolia AppID.
/// - parameter apiKey: the Algolia ApiKey.
/// - parameter index: the name of the index.
@objc public convenience init(appID: String, apiKey: String, index: String) {
    self.init()
    self.configure(appID: appID, apiKey: apiKey, index: index)
}

/// Create a new InstantSearch reference.
///
/// - parameter searcher: the `Searcher` used by InstantSearch
@objc public convenience init(searcher: Searcher) {
    self.init()
    configure(searcher: searcher)
}

// Multi-Index init

/// Create a new InstantSearch reference with the given configurations.
///
/// - parameter appID: the Algolia AppID.
/// - parameter apiKey: the Algolia ApiKey.
/// - parameter indexIds: the identifications for each index
@objc public convenience init(appID: String, apiKey: String, searcherIds: [SearcherId]) {
    self.init()
    self.configure(appID: appID, apiKey: apiKey, searcherIds: searcherIds)
}

/// Create a new InstantSearch reference with the given configurations.
///
/// - parameter searchables: an array of searchables
/// - parameter searchersIds: an array of searcherId that identifies a specific index
@objc public convenience init(searchables: [Searchable], searcherIds: [SearcherId]) {
    self.init()
    self.configure(searchables: searchables, searcherIds: searcherIds)
}

现在由您决定是要为一个视图控制器还是为整个应用程序创建实例