【Algolia】インデックスを日付でソートする
本日はAlgolia
のインデックスを日付でソートする方法を簡単に紹介していきたいと思います👷♀️
それではやっていく
インデックスをソートするにあたり、まず大前提として知っておくべきことが二点ほどあります。一つ目は、インデックス毎に一つのランキング式しか提供することができないということです。つまり、異なる方式でインデックスをソートしたい場合には、それぞれでインデックスを別途作成する必要があります。そして、そのような状況で作成するインデックスをAlgolia
ではReplicas
と呼びます。二つ目は、ソートに使用するattribute
はboolean
かnumerical
である必要があるということです。つまり、ISO8601
文字列で「2008-09-15T15:53:00」
のようなstring
のattribute
はソートに使用できないので、Replicas
を作成するタイミングで、UNIX timestamp
などに変換する必要があります。ちなみに、今回はFirestore
から取得したTimestamp
を使用していて、すでにnumerical
で値が保持されているので、変換については特に触れません。
ということでまずは日付でソートするためのReplicas
を作成していきます。ダッシュボードから元となるインデックスのReplicas
セクションで、Replicas
の名前を入力します。ちなみにReplicas
の名前のプレフィックスまたはサフィックスにはdesc
・asc
などをつけることが推奨されています。
名前を入力するとダイアログが表示されるので、変更を保存します。これでReplicas
の作成は完了です。
次に作成したReplicas
のソート方法を設定します。今回は下記のようなデータのcreatedAt._seconds
をソートするattribute
として使用します。
{ "categoryId": "0", "createdAt": { "_seconds": 1612168694, "_nanoseconds": 168000000 }, "fideeId": "a.san", "fieldId": "FYR3VvSikpJS7aca9VTO", "name": "Aさん", "updatedAt": { "_seconds": 1612168694, "_nanoseconds": 168000000 }, "objectID": "1FmuoPdNczQ1r2tIQTCOMnQjNTA3" }
作成したReplicas
(インデックス) のConfiguration > Ranking and sorting
で+ Add sort-by attribute
を選択して、ソートするattribute
を入力後、降順・昇順も選択します。これで設定を保存したら、準備は完了です。
あとは日付でソートしたいタイミングで、作成したReplicas
を呼び出せば日付でソートされたデータを取得することができます。
let sortByCreateDate = true let indexName = sortByCreateDate ? "dev_guide_create_date_desc" : "dev_guide"; let index = client.index(withName: indexName) index.search(Query(query: "")) { (result, error) in // use result and error }
ちなみに、今回はダッシュボードでReplicas
の設定を行いましたが、API
からでも同様に設定が可能なので詳しくは下記を参照してください。
https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/how-to/creating-replicas/
てな感じで本日も以上になります🍺
参考
- https://www.algolia.com/doc/guides/managing-results/refine-results/sorting/how-to/sort-an-index-by-date/
- https://blog.tatsuroh.com/2020-12-02/algolia-ranking-explained