2009-03-27 12 views
1

検索エンジンを開発するつもりです。検索エンジン、ドメインドリブンデザイン、asp.net mvc

私のDDDがどのように見えるのでしょうか?レコードのソートは実装する必要がありますが、自分のビューが自分のデータベース構造(ソートする列)について知りたがりません。私が理解する限りでは、ソート情報はインフラストラクチャのレイヤーからリポジトリーの実装から来るべきで、フレキシブルなドメインがなければなりません。

どのように見えるのですか?

強く入力する必要があります。

ベストプラクティスはありますか?

アーキテクチャに関する推奨事項はありますか?

答えて

1

検索エンジンを開発する場合は、スケーラビリティについて非常に高速に考える必要があります。検索関連の環境での並べ替えはよく知られている問題です。あなたは、Googleの検索実装を見てください!ソート方法はranking algorithmに依存します。ドメイン中心のランク付けアルゴリズム設計は、サービスアプローチとしてのランク付けと大きく異なるべきではありません。

ご使用の言語はあなたの選択です。分散コンピューティングの場合はC/C++ Message Passing Interface(MPI)を選択します。 Javaを使用する場合は、JMSGridGain(GridGainはGoogleのMapReduceを実装しています)をご覧ください。

もう1つの質問は、データの保存方法(分散、高速、フォールトトレラント)です。 Javaの場合、DDDに関する問題については

the high scalability websiteで続きを読む、Googleのアーキテクチャの詳細については

。あなたが自由のために得ることができる最高のシステムの一つである( Project Voldemordを見て顔をしています dddcommunity.orgで、エリック・エヴァンス自身のホームページ;)彼は非常に良い本 Domain-Driven Designを書いています。 DDDは、ドメインの完全性とドメインを保証するので、問題ありません。

単純なモデルは次のようになります。

page (URL url, BigInt rank, List<String> keywords, 
     List<URL> links, List<URL> outLinks, Content ref) 


content (GzippedBytes[] content) 

新しいノードがシステムに追加されている場合は、それはそれはそれ自身によって、ページランクだ得ることができるので、それは「SETLINKS」などのようなものに反応する必要があります。

クライアントは簡単ですが、の検索(キーワード)はPageRankでソートされています。

ここにはサービスexample of a pagerank implementationのJavaがあります。

+0

検索エンジンでは、Webクローラー/インデクサーを意味しませんでした。指定されたビジネスオブジェクトに対する通常の検索メカニズムであるはずです。 –

+0

現在の検索方法には、次のシグネチャがあります。 Get(文字列searchColumn、文字列クエリ、文字列orderExpr、int startIndex、int maxRows、bool useRanks、int authorRank、int titleRank、int otherRank)。 –

+0

UIレイヤーはデータベース構造については何も知らず、結果ページをソートできることを確認する方法はわかりません。 :) –

0

MVC Viewのディレクトリを解析し、ファイルを読み込んで、指定されたテキストを正規表現とマッチさせるカスタム検索エンジンの基本です。私のサイトは検索結果のHTMLリンクを返します。このコードは、リストを作成します。

List<string> results = new List<string>(); 
DirectoryInfo di = new DirectoryInfo (System.Configuration.ConfigurationManager.AppSettings["PathToSearchableViews"]); 
//get all view directories except the shared 
foreach (DirectoryInfo d in di.GetDirectories().Where(d=>d.Name != "Shared")) 
{ 
    //get all the .cshtml files 
    foreach (FileInfo fi in d.GetFiles().Where(e=>e.Extension == ".cshtml")) 
    { 
    //check if cshtml file and exclude partial pages 
    if (fi.Name.Substring(0,1) != "_") 
    { 
     MatchCollection matches; 
     bool foundMatch = false; 
     int matchCount = 0; 
     using (StreamReader sr = new StreamReader(fi.FullName)) 
     { 
      string file = sr.ReadToEnd(); 
      foreach (string word in terms) 
      { 
       Regex exp = new Regex("(?i)" + word.Trim() + "(?-i)"); 
       matches = exp.Matches(file); 
       if (matches.Count > 0) 
       { 
        foundMatch = true; 
        matchCount = matches.Count; 
       } 
      } 
     //check match count and create links 
     // 
     // 
     } 
     } 
     } 
    } 
    return results;