私は自分のアプリで簡単な検索を作成したいのですが、それについてインターウェブ上で何かを見つけることができません。それは2014年よりも新しいです。もっと良い方法があるはずです。 startAtおよびendAt関数がありますが、期待どおりに機能せず、大文字と小文字が区別されます。この問題をどのように解決しますか? 2016年にこの機能がまだ存在しないのはどうしてですか?
私の場合、次の方法でSQL LIKEを部分的に達成できました。
databaseReference.orderByChild('_searchLastName')
.startAt(queryText)
.endAt(queryText+"\uf8ff")
クエリで使用される文字\uf8ff
は、Unicode範囲内の非常に高いコードポイントです(Private Usage Area [PUA]コードです)。 Unicodeのほとんどの通常の文字の後にあるため、クエリはqueryText
で始まるすべての値に一致します。
この方法で、「Fre」で検索すると、データベースから_searchLastName
プロパティの値として「Fred、Freddy、Frey」を持つレコードを取得できます。
この質問は古いかもしれませんが、この方法を実現する方法について文書化された方法があります。実装は簡単です。 引用 :
Cloud Firestoreデータの全文検索を有効にするには、Algoliaなどのサードパーティの検索サービスを使用します。各メモがドキュメントであるメモ作成アプリを考えてみましょう。
Algoliaはfirebase functions
の一部となり、必要なすべての検索を実行します。
// Update the search index every time a blog post is written.
exports.onNoteCreated = functions.firestore.document('notes/{noteId}').onCreate(event => {
// Get the note document
const note = event.data.data();
// Add an 'objectID' field which Algolia requires
note.objectID = event.params.noteId;
// Write to the algolia index
const index = client.initIndex(ALGOLIA_INDEX_NAME);
return index.saveObject(note);
});
検索を実装するための最良の方法は、 インスタント検索-Android を使用することです
サンプル検索画像: GIF
Firebaseには、検索などの優れたSQLが組み込まれていません。値/キーでソートするか、
https://firebase.google.com/docs/database/Android/retrieve-data
上記のリンクで例を見つけることができます。これがfirebaseの最新のドキュメントです。
検索のようなSQLを探している場合。次に、弾性検索を見てみましょう。しかし、それを配置するプラットフォームが必要になるため、複雑さが増します。そのためには、HerokuまたはGoogleCloudServersをお勧めします
弾性検索を使用した高度な検索に関するブログ投稿 https://firebase.googleblog.com/2014/01/queries-part-2-advanced-searches-with.html
このアプローチの確実性についてはわかりませんが、Androidでfirebaseバージョン10.2.6を使用すると、次のようなことができます。
firebaseDatabase.getReference("parent")
.orderByChild("childNode")
.startAt("[a-zA-Z0-9]*")
.endAt(searchString)
時々うまくいくようです