2016-09-07 10 views
0

サードパーティを使用せずに検索を実装したいと考えています。私の現在のアイデアは、異なる文字列の長さをキーとして保存し、素早く索引付けすることです。私は最低3文字の長さを実装し、検索される文字列が小文字であることを確認します。彼らは、同じ検索キーを共有する検索することができる他のものがありますので、もし私がそれを拡張作った検索が容易になるように文字列をインデックス化する

{ 
    users: { 
     matUserId: { 
      name: 'Mathew' 
     } 
    }, 
    search: { 
     mat: { 
      users: { matUserId: true } 
     }, 
     ath: { 
      users: { matUserId: true } 
     }, 
     the: { 
      users: { matUserId: true } 
     }, 
     hew: { 
      users: { matUserId: true } 
     }, 
     math: { 
      users: { matUserId: true } 
     }, 
     athe: { 
      users: { matUserId: true } 
     }, 
     thew: { 
      users: { matUserId: true } 
     }, 
     mathe: { 
      users: { matUserId: true } 
     }, 
     athew: { 
      users: { matUserId: true } 
     }, 
     mathew: { 
      users: { matUserId: true } 
     }, 
    } 
} 

:firebase内のデータによる例えば、このようになります。私はこれがうまくいくと確信しています(私はそれをチェックアウトするための基本的な実装があります)が、これが正しい方法であるかどうか、または私が完全に基盤を外しているのだろうかと思っていました。たとえば、「hew」という単語を検索する場合、子ノードを「hew」とするだけで、ユーザーを取得して表示することができます。

+0

検索の正しい方法は、使用するケースによって異なります。 Firebase Realtime Databaseはフルテキスト検索エンジンではありません。その上でいくつかのFTS技法をエミュレートすることは可能ですが、それは完璧なフィットはほとんどありません。テキストを検索する場合は、懐中電灯の統合など、専用の検索エンジンを使用することをお勧めします。 –

+0

フランクに返信いただきありがとうございます。別のサーバーを実行する必要のないツールがありますか?上記の私の提案には、何か問題がありますか?非常に特殊なタイプの基本的な文字列検索を処理しても構いません。 –

+0

このような推奨事項はスタックオーバーフローに関するトピックではありませんが、Algoliaでは良い結果が得られました。 –

答えて

0

かなりのデータセットが作成されて以来、私はこの提案を嫌っていました。 Frank van PuffelenによるAlgoliaの提案は、私が現時点で無料バージョンのデータを非常に多く持っていることを除いて、うまくいくはずです。私は、文字列の始めから検索することができるだけでローリングを終わらせ、小文字でテキストを格納するための別個のキーを作成しました。そうすれば、私の検索はかなり単純なクエリになりました:

.orderByChild('searchLowerCase').startAt(query.toLowerCase()).endAt(query.toLowerCase() + "\uf8ff") 

これは私のニーズに合っています。

関連する問題