iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【Algolia】インデックスを日付でソートする

本日はAlgoliaのインデックスを日付でソートする方法を簡単に紹介していきたいと思います👷‍♀️

それではやっていく

インデックスをソートするにあたり、まず大前提として知っておくべきことが二点ほどあります。一つ目は、インデックス毎に一つのランキング式しか提供することができないということです。つまり、異なる方式でインデックスをソートしたい場合には、それぞれでインデックスを別途作成する必要があります。そして、そのような状況で作成するインデックスをAlgoliaではReplicasと呼びます。二つ目は、ソートに使用するattributebooleannumericalである必要があるということです。つまり、ISO8601文字列で「2008-09-15T15:53:00」のようなstringattributeはソートに使用できないので、Replicasを作成するタイミングで、UNIX timestampなどに変換する必要があります。ちなみに、今回はFirestoreから取得したTimestampを使用していて、すでにnumericalで値が保持されているので、変換については特に触れません。

ということでまずは日付でソートするためのReplicasを作成していきます。ダッシュボードから元となるインデックスのReplicasセクションで、Replicasの名前を入力します。ちなみにReplicasの名前のプレフィックスまたはサフィックスにはdescascなどをつけることが推奨されています。

f:id:yum_fishing:20210327163550p:plain

名前を入力するとダイアログが表示されるので、変更を保存します。これでReplicasの作成は完了です。

f:id:yum_fishing:20210327164154p:plain

次に作成した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を入力後、降順・昇順も選択します。これで設定を保存したら、準備は完了です。

f:id:yum_fishing:20210327165004p:plain

あとは日付でソートしたいタイミングで、作成した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/

てな感じで本日も以上になります🍺

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com