firestoreの覚書です。
elasticsearchやalgoliaについてもちょっと調べてみました。
目次
firestoreのデータの追加/置換/更新(addとsetとupdateの違い)
- addは追加。
- setは追加・置換。
- updateは特定のフィールドの更新。
サンプル。setとupdateを使うことが多い。.docは省略可だけど大抵入れます。
firebase.firestore.collection('Users').doc('userID').add({ ID, name }) firebase.firestore.collection('Users').doc('userID').set({ ID, name }) firebase.firestore.collection('Users').doc('userID').update({ name, // 名前だけを更新 text // テキストを追加 })
firebaseの全データを取得(vuexの場合)
vuexの場合。
const userRef = firebase.firestore().collection('users') export const actions = { users({ commit }) { userRef .get() .then((snap) => { snap.forEach((doc) => { console.log(doc.id, '=>', doc.data()) }) }) .catch((error) => { console.log(error) }) } }
firestoreの検索(vuexの場合)
vuexの場合。クエリー検索する場合は検索条件をしてあげましょう。
const userRef = firebase.firestore().collection('users') export const actions = { users({ commit }) { userRef .orderBy('names', 'desc') .get() .then((snap) => { console.log('snap') }) .catch((error) => { console.log(error) }) } }
orderByの前後にいろいろと条件を追加すればいいだけですね。他にもstartAtなどいろいろとあるため条件を追加しましょう。
RTDBのコードのサンプル。
firebase .database() .ref(`${ref}`) .orderByChild('name') .limitToLast(50) .startAt(payload.keyword) .endAt(payload.keyword + '\uF8FF') .then((snapShot) => { })
firebaseの全文検索はなし、検索機能は中途半端で使えず!?
このぐらいならできます。

ただし、firebaseは全文検索はサポートしていないようです。
また、範囲指定を複数置く場合、問題が生じるようです。。試したところ、検索についてはあまりいい印象がありませんね。。
つまるところ、firebaseに公式サイトにもありますが、algoliaかelasticsearchかを使ってくださいということですかね。。
firebaseに加え、algoliaもelasticsearchも有料なので個人開発者を悩ませそうですね。。
全文検索比較、elasticsearchやalgoliaはどうなの?
有料ですがelasticsearchやalgoliaなどの選択肢があります。
Elasticはオランダの会社で株も公開されている上場企業です。githubなどで採用に加え、pairs(←彼氏彼女がいない人はすぐにはじめられます。)などマッチングアプリやショッピングサイトでの採用実績があるようです。
algoliaはフランス発のサービスで、現在はアメリカのサンフランシスコに本社があります。爆速のようです。
少し調べたところ、algoliaの方が評判がよさそうなのですが、料金はElasticsearchなのですかね。。
先日全文検索用に導入しようとせっせと組み込みしていたalgoliaですが、費用の面から断念・・・
ということで、今日は似たようなサービスのElasticsearchのSearchlyをせっせと組み込んでました🐻「Elasticsearchって名前聞くけどよくわかんね😇」
だったんですが、なんとなく分かってきました😄— いくま@フリープログラマー (@hisk_of_gnct) August 27, 2020
全文検索エンジンはAlgoliaをよく使って機能的には最高なんだけど、正直料金高いのでElastic CloudとかElasticsearchに移行したい感ある。
— こんろー (@conroe215) January 18, 2020
Elasticsearchの評判です。
いえ、サイトに乗ってる金額がそのままですね。App Searchを使うのであれば、月49ドルです。その他の話はかからないです。Elastic Cloud のElasticsearch Serviceを使うのであれば、月16ドルからだけです。AWSやGCPなどのインスタンス利用料自体も含まれてます。
— Jun Ohtani (@johtani) October 1, 2019
Algolia 無料プランあるけど商用には使えない
商用で使う場合は月29ドルからhttps://t.co/XnXlULe5uAElasticSearch
月16ドルからhttps://t.co/SoUIUtn252
オンプレでも動かせてオンプレだと無料からhttps://t.co/EGqqHP8XrCということで今回はElasticSearchにしとこうかな
— Katsumi Ponda (@kponda) January 30, 2020
Algolia便利だけど、やっぱり料金の問題があり、継続は難しい。Elasticsearchを検討して調査した。ElasticsearchとKibanaは無料だけど、これらをGCEにデプロイして利用するのにお金がかかる。デプロイ周りなどマネージドしてくれるのが、Elasticsearch Serviceで最低$16でAlgoliaの$29より安い。
— ストクロ (@kurotyann9696) May 16, 2020
他にも海外から情報をとったところelasticsearchの方が安いと書かれたものがありました。
難しいところです。普段ならいいものをとりたいですが、ただ、サブスプリクションなので料金をとりますかね。。
なお、elasticsearchはクロスドメインやインデックス頻度により料金が変更されるため、個人では敷居が高いかもしれません。algoliaもmultiple domainsはライセンスが分けられているようです。non-commercial use(非商用利用)に限り無料枠があるようです。商用利用の場合は有料プランでないと使えません。
elasticsearchはudemyで日本語講座がでています。英語講座は、Complete Guide to Elasticsearchが人気でした。algoliaは英語講座だけのようです。algoliaの情報も困らない程度にはありそうですが、elasticsearchの方が情報量が多いため、学習コスト的にはelasticsearchの方がやや楽かもしれません。
udemyのオススメ講座はこちらにまとめました。


参考になれば幸いです。
コメント