インデックス管理

解説

概要

インデックス(Indice)はレコードを束ねるリストのことです。たとえば posts というインデックスには記事のレコードが連なっています。インデックス管理では

・どの属性を検索対象とするか(タイトルや本文など)
・どの属性を絞り込み条件とするか(タグ、カテゴリなど)
・どの順番で検索結果を並べるか(公開日順など)

を指定します。この記事ではレコードが以下の構造である前提で解説を進めます。

{ title: '記事タイトル', // タイトル createdAt: 123456789, // 作成日 public: true, // 公開ステータス body: 'xxxxx', // 本文 category: ['it', 'web'] // カテゴリ }

インデックスの作成

Algoliaダッシュボードからインデックスを作成できます。開発用のものと本番用のもので分けるためにプレフィックスをつけましょう。以下に一般的な例を示します。

インデックス名環境並び順
dev_posts_desc開発(dev)新しい順(desc)
dev_posts_asc開発(dev)古い順(desc)
prod_posts_asc開発(prod)古い順(desc)
prod_posts_asc開発(prod)古い順(desc)

ソートの基準が複数ある場合、それもインデックス名に含めましょう。たとえばユーザーを誕生日順や作成日順で並べたい場合以下のようになります。

  • dev_users_bday_desc
  • dev_users_bday_asc
  • dev_users_created_asc
  • dev_users_created_desc

検索対象の属性を設定

レコードの中でキーワード検索の対象にしたい属性はインデックスに設定する必要があります。Algoliaダッシュボードにて Index>Configuration>Searchable attributes とすすみ、その中で検索対象にしたい属性を設定します。今回は記事タイトルと本文を検索対象としたいので titlebody を設定することになります。設定順序が上にある方が検索結果で優先されるため、 title を上にしておくべきでしょう。unordered に設定するとこの優先度を無視して結果に反映することができます。

ここで設定しない属性に対してはキーワード検索がきかないので気をつけましょう。

絞り込みの条件となる属性を設定

Algoliaダッシュボードにて Index>Configuration>Facets とすすみ、絞り込み対象の属性を指定します。カテゴリと公開状態で絞り込みたいのであれば publiccategory を指定します。

それぞれ以下のようにしてください。

  • category - searchable
  • public - filter only

オプションは以下の意味を持ちます。

  • searchable - 条件自体を検索可能にする(カテゴリ名の検索など)
  • not searchable - 条件一覧を表示するが条件自体の検索はさせない
  • filter only - 属性を検索、表示させず絞り込みのみに利用する

たとえばカテゴリが200個ある場合、記事投稿画面のセレクタから該当するカテゴリを探させるのは現実的ではありません。カテゴリ検索用の入力欄を用意し、カテゴリ名検索でカテゴリを絞り込んだ上で選択する方がユーザーに優しいでしょう。そのUIを実装したい場合 searchable にする必要があります。

公開ステータスの記事のみを表示するために public 属性をフィルターとして使いますが、条件自体を画面に表示する必要はないため publicfilter only としています。

ソート(並び順)の設定

ソートの設定

ダッシュボードの Index>Configuration>Ranking and Sorting からソートを設定できます。設定属性の並びが上の方がソート基準として優先されます。

  • Ascending - 昇順(古い順)
  • Descending - 降順(新しい順)

となります。

ソートの切り替え

Algoliaのソートはインデックスに固定されます。つまり、 posts という記事一覧のインデックスが新しい順であった場合、その並び順自体をUIから動的に変更することはできません

ではどうやって検索結果のソートを切り替えるのでしょうか。答えは並び順の数だけインデックスを複製することです。

たとえば新しい順と古い順の並べ替えをしたい場合、以下の2つのインデックスを持つ必要があります。

  • 新しい順のインデックス - posts-latest
  • 古い順のインデックス - posts-oldest

インデックスが増えたからといってレコード管理の実装が2倍になるわけではありません。Algoliaには通常のインデックス複製に加えレプリカと呼ばれる特殊な複製が用意されています。

レプリカはインデックスのデータは運命共同体的にシェアしつつ、インデックスの設定は各々がもつという性質があります。

これによりレコードを2つのインデックスに重複して追加していく必要はなく、レプリカの作成元となるインデックスに追加さえすれば自動的にレプリカである複製されたインデックスからも参照できるようになります。

ソートUIで並び順を変更する場合参照するインデックスを変更することになります。

使用ライブラリ

なし

参考サイト