14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Firestore×Algoliaで押さえておきたい基本的なポイント

Posted at

firestoreで全文検索を実現する方法の一つとして、Algoliaの導入が考えられます。
Firestoreでは、全文検索をサポートしておりません。
公式でも、外部の検索サービスの使用が推奨されています。
全文検索|Firebase

本記事では、これだけ押さえておけば簡単に検索機能が実装できるポイントをまとめてみます。

#Search with Algoliaの導入
まずは、FirestoreとAlgoliaのデータを同期させる必要があります。
従来では、Cloud Functionsを用いて、Firestoreの変更を検知し、Algoliaにデータを渡す必要がありました。
現在は、Firebase ExtensionsにSearch with Algoliaがリリースされており、簡単にFirestoreとAlgoliaの連携が可能です。
Search with Algoliaの導入は他記事に丸投げします。下記記事で丁寧に解説されています。
超お手軽にFirestoreに全文検索を導入できるSearch with Algoliaを試してみた

Search with Algoliaはまだβ版であるのと、拡張性に疑問点があるので、開発中のアプリによってはCloud Functionsの使用を検討して下さい。

##補足
Seach with Algoliaの拡張機能の構成において、Indexable Fieldsを任意に設定することができます。任意ではあるのですが、Indexable Fieldsを設定しておかないと、「Record is too large」というエラーで弾かれる可能性があります。

どうもAlgoliaに登録できるレコードサイズはかなり少ない模様です。
そのため、検索対象のデータに限定してAlgoliaに渡す必要があります。
レコードサイズの目安としては、ドキュメントの下記部分が一つの参考になります。
Reducing Record Size|Algolia
 
Algoliaには、あくまで検索対象のデータを格納するのが無難です。
よって検索後の表示に必要なデータも併せてAlgoliaに格納することは難しいです。
Algoliaで検索した後、表示に必要なデータは改めてFirestoreから持ってくる必要があります。

スクリーンショット 2021-09-09 204133.png

#Algoliaの基本的な使い方
Javascriptで記述していきます。
ドキュメントの下記あたりから抜粋しています。
Algoliaドキュメント
###データの取得
Algoliaからのデータの取得

index.search('検索キーワード', {
  page:0 //ページネーションのため
}).then(({ hits }) => {
  console.log(hits);
});

index.search('検索キーワード',query)が基本構文です。
ページネーションについては後述します。
Algoliaドキュメント

また、処理を行うJSファイルの任意の箇所に下記コードを記述しておきます。
'YourApplicationID'、 'YourSearchOnlyAPIKey'、'indexName'は各自のAlgoliaサイトの「API Key」から入力します。

const client = algoliasearch('YourApplicationID', 'YourSearchOnlyAPIKey');
const index = client.initIndex('indexName');

またAlgoliaコンソール上で検索対象のデータを指定するのを忘れないようにしましょう。
検索対象.png

###ページネーション
ページネーションの実装は非常に簡単です。
デフォルトでは、1ページで20件ヒットします。

index.search('検索キーワード', {
  page:0 //1~20件目がヒット
 //page:1なら、21~40件がヒット
}).then(({ hits }) => {
  console.log(hits);
});

pageの値を変数で管理すれば、ページネーションが簡単に実装できそうです。
ヒット数は下記画面部分で任意に指定する事ができます。
pagenation.png

##ソート機能
ソート機能は、Algoliaのコンソール上で設定することが可能で、index.serachで呼び出すと勝手にソートしたデータを取得してくれます。
ソート.png

##最後
データの取得、ページネーション、ソートが出来れば、最低限の検索機能が実装できるのではないでしょうか。

その他にも、ユーザーランキングや検索対象のハイライトなどの機能も簡単に実装できそうです。 

私が個人開発したアプリでもAlgoliaを用いた全文検索機能を実装しておりますので、もし良ければデモ用にご利用下さい。

個人開発したアプリ「Share Hondana」

14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?