BlogEngine.NET2.6で追加されたWebテストプロジェクト(WatiN)

by Administrator 15. 7月 2012 00:30

前回公開されたBE2.6ですが、ソースコードをダウンロードするとプロジェクトにテストプロジェクトが含まれていました。

「BlogEngine.Tests」というプロジェクトで、WatiNとNUnitをベースにしたテストプロジェクトとなっています。

 

 

ASP.NETで、Web自動テストを作る時には参考にすると良いのではないでしょうか。

Tags: ,

プログラム

検索部分の仕組み

by Administrator 29. 10月 2008 13:05

@ITの掲示板でBlogEngine.NETの検索機能についての質問が上がっていたので、ちょっとコードを見てみました。
BlogEngineでは、Core.dllのSearch.csで検索ワードのマッチングを行っています。メインの処理に当たるのが、以下のBuildResultSetメソッドです。

 

   1:  private static List<Result> BuildResultSet(string searchTerm, bool includeComments)
   2:  {
   3:    List<Result> results = new List<Result>();
   4:    string term = CleanContent(searchTerm.
   5:             ToLowerInvariant().Trim(), false);
   6:    string[] terms = term.Split(new char[] { ' ' },
   7:                  StringSplitOptions.RemoveEmptyEntries);
   8:    string regex = string.Format(System.Globalization.
   9:       CultureInfo.InvariantCulture,"({0})", string.Join("|", terms));
  10:   
  11:    foreach (Entry entry in _Catalog)
  12:    {
  13:      Result result = new Result();
  14:      if (!(entry.Item is Comment))
  15:      {
  16:        int titleMatches = Regex.Matches(entry.Title, regex).Count;
  17:        result.Rank = titleMatches * 20;
  18:   
  19:        int postMatches = Regex.Matches(entry.Content, regex).Count;
  20:        result.Rank += postMatches;
  21:   
  22:        int descriptionMatches = Regex.Matches(entry.Item.Description, regex).Count;
  23:        result.Rank += descriptionMatches * 2;
  24:      }
  25:      else if (includeComments)
  26:      {
  27:        int commentMatches = Regex.Matches(entry.Content + entry.Title, regex).Count;
  28:        result.Rank += commentMatches;
  29:      }
  30:   
  31:      if (result.Rank > 0)
  32:      {
  33:        result.Item = entry.Item;
  34:        results.Add(result);
  35:      }
  36:    }
  37:   
  38:    results.Sort();
  39:    return results;
  40:  }

 

ここでやっているのは、ブログのエントリをコレクションで取得して、それらをループして、正規表現でマッチングしています。マッチングしたエントリにポイントを与えて重みづけをしています。重みづけの仕組みは、タイトルでマッチングした場合はマッチ回数×20、Description(メタ)だとマッチ回数×2、本文とコメントだとマッチ回数、という感じで合算しています。そして、最後にソートして戻しています。

BlogEngine.NETはデータストアにXMLやSQL Serverや他のDBを切り替れるプロバイダモデルを採用しています。データベース固定であれば、SQLのLIKEもしくは全文検索サービスを使う手もあるかもしれませんが、ここでは、汎用的で自由が利く正規表現を使って検索を行っているのだと思います。

 

Tags: , ,

プログラム

このサイトについて

BlogEngine.NETの情報を公開しています。もちろんBlogEngine.NETで動いています。

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2017 BlogEngine.NET情報サイト