🔎
全文検索サービスAlgoliaをNode.jsで使ってみる
2024-12-15
約2785字
Yardでは、検索機能をAlgoliaで実装しています。
筆者は、これまで 検索サービスとして Elastic Cloud や AWS OpenSearch などの経験はありましたが、
と言った点からAlgoliaを採用してみました。
また、検索フォームをサイト内に埋め込むだけで、簡単な検索機能を実現できます。
さらに、Algoliaはレコメンド機能も提供しており、データサイエンスの知見がなくても簡単にデータプロダクトを導入ができます。
今回、バックエンドで node.js クライアントからサービスの利用方法を紹介します。
サイドメニューの「Setting」→「Applications」→右上の「Application Create」から作成できます。
regionを選ぶ際、Japanも選択肢にありますが、you'll need to Talk to an Algolia expert.
と表示され、問い合わせが必要だと言われます(2024年3月時点)。US(West)などだとすぐ使えます。
その後、最初のIndex(DBでいうテーブルのようなもの)を作るように促されます。今回は、article
とします。
アプリケーションのトップから、 「API Keys」から Application ID
と Admin API Key
を取得しておく。
# npm install algoliasearch
記事データをIndexに入れる際は、以下のように実行します。
登録するObject(DBでいうレコードのようなもの)には、一意の文字列のobjectIDを指定する必要があります(integerを入れても文字列にキャストされた値で登録されます)。
今回は、replaceAllObjects
メソッドで全件をリプレイスしてみます。replaceAllObjects
を saveObjects
にすると、対象のobjectIDがもともとある場合はupdate、ない場合はinsertになります。
Object ないのattribute
が対応するデータ型は、
になります。例に示した、publishedAtのような日時は unixtime のようにintegerにして入れる必要があります。
import algoliasearch from "algoliasearch";
const searchClient = algoliasearch(
ALGOLIA_APPLICATION_ID,
ALGOLIA_ADMIN_API_KEY,
);
const index = searchClient.initIndex("article");
const objects = [
{objectID: '1', id: '1', title: 'title1', body: 'body1', publishedAt: 123},
{objectID: '2', id: '2', title: 'title2', body: 'body2', publishedAt: 456},
]
index.replaceAllObjects(objects)
"title" を含む object を publishedAtの降順(articleの新着順)で検索したい場合は、以下のようなコードになります。
一般的な検索サービスと同様、 "title" を "Title" などにしても同様な結果が得られ、多少の表現の揺らぎにも対応できます。
import algoliasearch from "algoliasearch";
const searchClient = algoliasearch(
ALGOLIA_APPLICATION_ID,
ALGOLIA_ADMIN_API_KEY,
);
const index = searchClient.initIndex("article");
index.setSettings({ ranking: [`desc("publishedAt")`] });
const results = await index.search("title")
console.log(results)
出力結果
{
hits: [
{
id: '2',
title: 'title2',
body: 'body2',
publishedAt: 456,
objectID: '2',
_highlightResult: [Object]
},
{
id: '1',
title: 'title1',
body: 'body1',
publishedAt: 123,
objectID: '1',
_highlightResult: [Object]
}
],
nbHits: 2,
page: 0,
nbPages: 1,
hitsPerPage: 20,
exhaustiveNbHits: true,
exhaustiveTypo: true,
exhaustive: { nbHits: true, typo: true },
query: 'title',
params: 'query=title',
renderingContent: {},
processingTimeMS: 1,
processingTimingsMS: { _request: { roundTrip: 125 }, total: 1 },
serverTimeMS: 1
}
今回は、Node.jsのクライアント経由で、Algoliaを扱うコードを紹介しました。
Algoliaは、1ヶ月で1万リクエストまでだと無料で使えるため、MVPの開発などには非常に便利です。
筆者もドキュメントを読んで、数時間で基本操作は実装することができました。(ソートする操作が若干わかりにくかったですが。。)
自分の周りでも、よりAlgoliaのユーザーが増えてくれれば良いと思います。
©︎ 2025 - Yard