今回は Algolia
で、特定の属性のみをクエリの対象とした検索機能の実装を行ったので、その方法を簡単に紹介したいと思います🏃🏻♂️
それではやっていく
ということで、Query
の .restrictSearchableAttributes
として属性を設定することで、特定の属性を対象として検索を行います。.restrictSearchableAttributes
についてはドキュメンとでも解説されているので、ぜひ覗いて見てください。
private let client = SearchClient(appID: "YOUR_APP_ID", apiKey: "YOUR_API_KEY") func search(with fieldId: String, page: Int, perPage: Int) { let query = Query(fieldId).set(\.restrictSearchableAttributes, to: ["fieldId"]) client.index(withName: "guides").search(query: query.set(\.hitsPerPage, to: perPage).set(\.page, to: page)) { result in switch result { case .success(let response): // TODO: Handle response. case .failure(let error): // TODO: Handle error. } } }
しかし、この状態で検索を行うと下記のようなエラーが発生します。
AlgoliaSearchClient.ErrorMessage? (description = "invalid setting for restrictSearchableAttributes, attribute fieldId is not in searchableAttributes setting")
エラーの通り、Algolia
では searchableAttributes
という検索対象の属性指定がない場合に .restrictSearchableAttributes
を使用すると検索が無効になるようです。searchableAttributes
が空の場合は全ての属性が検索対象となるそうなので、とりあえず検索に必要な属性のみ適用していきます。今回はコンソールから指定しますが、それぞれの SDK
からも変更することが可能なようです。
https://www.algolia.com/doc/api-reference/api-parameters/searchableAttributes/
ということで、下記のように searchableAttributes
を設定しました。
これで、再度検索を行うと fieldId
の属性で検索を行えるようになりました🚀
参考
- https://www.algolia.com/doc/api-reference/api-parameters/restrictSearchableAttributes/?language=swift
- https://www.algolia.com/doc/api-reference/api-parameters/searchableAttributes/
- https://discourse.algolia.com/t/using-restrictsearchableattributes-gives-error-if-searchableattributes-are-unordered-same-level-in-php-client/1407/4