web-dev-qa-db-ja.com

Firebaseデータベースの文字列で簡単な検索を行う方法は?

私は自分のアプリで簡単な検索を作成したいのですが、それについてインターウェブ上で何かを見つけることができません。それは2014年よりも新しいです。もっと良い方法があるはずです。 startAtおよびendAt関数がありますが、期待どおりに機能せず、大文字と小文字が区別されます。この問題をどのように解決しますか? 2016年にこの機能がまだ存在しないのはどうしてですか?

30

私の場合、次の方法でSQL LIKEを部分的に達成できました。

databaseReference.orderByChild('_searchLastName')
                 .startAt(queryText)
                 .endAt(queryText+"\uf8ff")

クエリで使用される文字\uf8ffは、Unicode範囲内の非常に高いコードポイントです(Private Usage Area [PUA]コードです)。 Unicodeのほとんどの通常の文字の後にあるため、クエリはqueryTextで始まるすべての値に一致します。

この方法で、「Fre」で検索すると、データベースから_searchLastNameプロパティの値として「Fred、Freddy、Frey」を持つレコードを取得できます。

99
Francesco

この質問は古いかもしれませんが、この方法を実現する方法について文書化された方法があります。実装は簡単です。 引用

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

1
Lucem

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

1
Jemil Riahi

このアプローチの確実性についてはわかりませんが、Androidでfirebaseバージョン10.2.6を使用すると、次のようなことができます。

firebaseDatabase.getReference("parent")
                            .orderByChild("childNode")
                            .startAt("[a-zA-Z0-9]*")
                            .endAt(searchString)

時々うまくいくようです

0
larrytech