2017-06-05 7 views
0

私は、モバイルクライアントからアクセスできるAPIを使用してウェブサイトを開発しています、アプリがhttp://zomato.com/最適化されたデータベースの検索アルゴリズム

に似た何かが、我々は、テーブルの車(carID、モデル、メーカー、トランスミッションを持って言うことができますです例えば、メーカーやモデル用に別のテーブルを作成した場合など、他のテーブルのフィールドもクエリに含めることができます。

もちろん私はすべてのフィールドで同様の句を使用してクエリすることができます、それは正しい方法ですか?何千もの記録があるのでしょうか?

モバイルアプリまたはウェブサイトのいずれかを使用している場合、リアルタイムのクエリにリアルタイムで問い合わせる必要があります。

私はネットに精通していますが、他の推奨事項を教えて、出発点(ライブラリ、既存のオープンソースプロジェクト)を通して私を導いてくれたらうれしいです。

注:ユーザーが唯一の検索フィールドとモデル、カテゴリなどのようなオプションのフィルタを持っています...ここで

答えて

0

は私が何をするのかです。

IQueryableを使用してクエリを構築します。 if文を使用して、パラメータに値があるかどうかを確認し、その場合はwhere文をクエリに追加できます。クエリがすべて設定されたら、.ToListまたは.AsEnumerableでメモリに送信します。私もページ付けのためにSkipTakeを使用することになり

public List<Data> Search (string param1, string param2) 
{ 
    IQueryable<Data> query = db.SomeTable; 

    if (!String.IsNullOrEmpty(param1)) 
     query = query.Where(m => m.Field1 == param1); // might use contain depending on your use case 

    if (!String.IsNullOrEmpty(param2)) 
     query = query.Where(m => m.Field2 == param2); 

    return query.ToList(); 
} 

編集:これは、私が知っているデータベースと同じくらい速く、他の誰かがもっと速い機能を知っていれば教えてください。 NoSQLデータベースと静的文書を使用することで、より迅速な対応を実現できますが、数千ものレコードに対してデータベースは正常に動作するはずです。

+0

はい私はこの方法をデータベースに照会することに気づいていますが、私の場合はどのフィールドが照会しているのかわからないので、より高度なものを探していました。私は、例えば、彼が最初の3文字の結果を入力したときに検索エンジンのようにフィルタリングを開始すると、APIクライアントにリアルタイムの応答を与える方法を望んでいました。 –

+0

自動完全検索ボックスの場合、キーワードのリストが必要です。提出されたすべてのキーワードのテーブルを作成するのが最善であり、キーワードがX回数だけ提出された場合、自動完成に使用されるキーワードテーブルにキーワードを追加するという一般的なルールを使用できます。また、キーワードの白と黒のリストを実装する必要があります。あなたが持っているクエリは、それぞれのフィールドに複数のwhereステートメントを置くだけでよいはずです。インデックス、キャッシングなどのようなクエリの外にあるデータベースの最適化に集中したいと思う可能性が最も高いです... –

+0

私はブラック/ホワイトボックスのアイデアが好きです。自動完成データをロードするための初期値)、もう1つは実際の結果を得ることです。私は何をしようとしているのかは私が思ったほど複雑ではありませんが、NoSqlについて言及して以来、私は以前これを使用していませんでした。私はそれについていくつかの記事を読みましたが、データベースエンティティ間の出荷)、私は質問の主題を変更したくありません。リレーショナルデータベースを使用するかどうかわからない場合や、新しいテクニック(NoSql)を学ぶために多くの時間を費やす必要があります。 –