🔖

全文検索に入門してみた Part1 AlgoliaのGet Started!

2024/03/25に公開

全文検索サービスのAlgoliaを使ってみた記事です

全文検索機能のハンズオンをするうえで調べたこととかまとめています。
スクラップでも良かったかもしれない?
この記事ではAlgolia公式のGet Started!をやるまでの内容をまとめます。

やりたいこと

http://example.com/category_AのようなURLがあって、http://example.com/category_A/article1というように記事が格納されているとして、category_A配下を対象にして全文検索を行いたい。

以下は細かい設定・想定、要求事項

設定・想定

  • 検索対象の記事はブロク記事のように日々増えていくのではなく、マニュアルのようにコンテンツのボリュームは有限(例えば、ライブラリのドキュメントのようなもの)
  • 将来的にCMSの利用予定はない設定(学習のためにmicroCMS触ってみたい思いはありますが)

要求

  • 検索対象のコンテンツが増えた場合(article2,3...と増えた場合)に、人が作業すること無く検索対象に含めることができる
  • 検索結果から該当ページに遷移することができる

全文検索の全体像

最初に全文検索機能ってどんな仕組みで動いているのか、Algoliaはその仕組の中でどこを担っているのかを調べました。

どこまでよしなにやってくれるものなのか分からなかったので、最初は「クライアント側で実行するSDKみたいなのが用意されてて、それである程度いい感じに検索対象を指定したら検索結果を返してくれてる」と思ってました。

あながち間違いではなかったのですが、調べていくとDBにクエリを投げるとのあまり変わらないなという印象を受けました。
Algoliaについては検索対象データ保存用のDBをと、CRUD用のAPIエンドポイントをAlgolia側が担ってくれます。
検索対象データを保存(登録)することをインデックスと表現するようです。

そしてChat GPTさんによるとインデックスについては、クローリング設定をしておくことで、随時人間側が作業をするということをしなくてよいみたいです。

気をつけたいこと

キャッシュ周りの動作や、動的に生成するコンテンツなど、検索対象のデータ内容に関する事項については正確に把握しておく必要があるなと思いました。
Algolia固有の問題というわけではないですが私は全文検索機能を「リアルタイムで検索してくれるすげーやつ」という素人のようなイメージでいたので、はて”リアルタイム”とはいつ時点のデータのことか、リアルタイムっぽく見せるためにはどうすべきかというところまでイメージができていなかったです。

利用の流れ

アカウント作成

Algoliaのアカウントを作成します。他のSaaSと何ら変わりませんので特に書くことがありません、省略。

Get Started!

ログインした後、左下に見える「Get Started!」から始めました。
画面中央の「Connect your data」から進むとドキュメントページ(リファレンス)に飛ばされます。実装を進める段階になったら目を通していきたいですが、きっとまだこのときではない。

step0

「セットアップしよう!」というように言われます。
set_up

簡単にですが以下のように進めました。

Send and manage your data

create your first indes

インデックス名
Atomic Designのコンポーネント切り出しをやってみていたところだったので「Atomic Design」としました。(http://example.com/category_AこのURLでいうcategory_Aのところが、Atomic Designについてのカテゴリ名を入れています)

import your records

レコードというのは検索対象データのことです。
「レコードのインポートは、手動、ファイル、データコネクタ経由、またはAPI経由で行うことができる」ということなので、今の段階では飛ばします、、、としたいところですが、これをやらないと進めない。

A record is an item or object added to an index that you want to make searchable. You can import records manually, with a file, via a data connector, or through our API.

Get Started!を終わらせて全体像を掴むことを優先するために、「Select saple dataset」から「E-commerce」を選択しました。バックグランドでデータ生成しているためか、30秒弱のロードが入ります。
import your data

ロードが終わるとインデックスの画面に飛ばされます。
画面の内容をあれこれ読んでいると「1万レコードの上限に達しているぜ、アップグレードしないかい?」というメッセージが表示されてますね。「# records 10,000」となっていて、確かに1万レコード追加されていそうだということが読み取れます。
動作確認用のデータを用意してくれるなんて親切ですね、嬉しい。

You have exceeded your Free app's 10,000 Record limit. You can delete records or indices, or upgrade at any time for increased capacity.
sample data

Configure search relevance

インデックスの作成ができたので、使おうと思ったらもう使えhttps://blog.ojisan.io/proprietary-search/るんでしょうが、とりあえずGet Started!の続きをやってみます。
左下のロケットアイコンからGet Started!の画面に戻ります。

この項目は作成したインデックスに対する設定項目のイントロダクションをしているみたいです。
searchable attributesでは検索の対象の属性(JSONで言うKey)を設定できるみたいです。
custom rankingでは優先順位付けをするんでしょうか、まだ詳しく見ていないのでとりあえずこれくらいの理解です。

ちょっと分かりづらいのですが、各設定項目に飛んで色々弄った後、その設定を反映させるためには株のナビゲーションに表示されている「Review and Save Setting」のボタンを選択する必要があります。
option

この項目は触ったらすぐに完了になってしまってキャプション取れなかったのですが、サンプルのページを生成してくれます。ハンズオンのハードルが下がってすごい助かる。
試してないですが前項で設定した内容が反映されてそうですね。アプリケーション側で構築を進めるのとは別に、こちら側で色々試せるのは助かります。

Send your conversion and click events

こちらはアクセス解析ツールとの連携方法についての項目です。
ちょっと趣旨と逸れてしまいますが、セットアップするだけやってみます。

Other Optionから進むと「Events Setup」の画面に進みます。
analytics_configure

Step1
「Optional additional services」はオフで次に

Step2
「Algolia InstantSearch」を選択して次に
(比較的簡単そうだったので)

Step3
作成した記事を検索対象としたいので「Media」を選択して保存

私の場合、ここをやってもハンズオンのステップは完了にならなかったので「Get Started!」の部分は完了にします。

Discussion