検索部分の仕組み

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: , ,

プログラム

投票ウィジェット

by Administrator 23. 10月 2008 18:08

投票ウィジェット(Poll Widget)を公開されている方がいました。

BlogEngine.NET Poll Widget

なかなか、良さそうですね。

Tags: ,

Tips | インフォメーション

インストール方法と設定画面のページ

by Administrator 22. 10月 2008 14:42

インストール方法と管理画面(コントロールパネル)についての簡単な説明ページを追加しました。

よかったらご覧ください。

 

Tags: , ,

インフォメーション | セットアップ

Community ServerからBlogEngine.NETへマイグレーション

by Administrator 20. 10月 2008 13:35

Community ServerからBlogEngineへのマイグレーションについての情報が以下のブログで公開されています。 

http://neovolve.com/post/2008/10/15/Supporting-Community-Server-urls-in-BlogEngineNet.aspx

あまり、ちゃんと読んでいませんが、既存のCommunity ServerへのURLアクセスをBlogEngine.NETにリダイレクトするようです。

HTTPモジュールを含むソースはCodePlexで公開されています。

http://www.codeplex.com/Neovolve/Release/ProjectReleases.aspx?ReleaseId=18350

 

幾つかの1.4.5のテーマ

by Administrator 19. 10月 2008 20:07

以下のサイトでバージョン1.4.5のテーマが幾つか配布されています。

http://www.onesoft.dk/category/-BlogEngine-Themes.aspx

http://www.thomasbosscher.com/thomas_bosscher/page/Theme-Grabber.aspx

良いものがあったらダウンロードしてみてはいかがでしょうか。

なお、テーマを変更するには、ダウンロードしたファイルを、themesフォルダに解凍します。そして、コントロールパネルの設定タブから、そのテーマを選択します。

Tags:

Tips | インフォメーション

このサイトについて

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情報サイト