連載:VBで実践! 外部コンポーネント活用術全文検索エンジン「Lucene.Net」を使うデジタルアドバンテージ 岸本 真二郎2009/03/27 |
![]() |
|
|
|
検索アプリケーションを作成
続いては、次のような画面のWindowsフォーム・アプリケーションを作成し、テキストボックスに入力された文字列を、先ほど作成した.NET TIPSの記事タイトルが格納されているインデックスから検索する処理を実装してみます。
![]() |
| 検索アプリケーション |
検索処理を行うには、まず検索対象とするフィールド(Fieldオブジェクト)と、使用するアナライザ(JapaneseAnalyzerオブジェクト)を指定して、QueryParserオブジェクトを作成します。そして、テキストボックスに入力された文字列をパラメータにしてParseメソッドを実行し、Queryオブジェクトを作成します。
次に、インデックスのあるフォルダを指定してIndexSearcherオブジェクトを作成します。そして、いま作成したQueryオブジェクトをパラメータにして、Searchメソッドを実行すると、検索処理が行われます。
検索結果はHitsオブジェクトとして返されます。これには検索にヒットしたDocumentオブジェクトのリストが含まれるので、これを順番に表示すれば検索結果を表示できます。ヒットしたDocumentオブジェクトのスコアは、Scoreプロパティで取得できます。
Lukeの使用例でも触れましたが、検索処理で重要な点は、インデックス作成時のアナライザと、検索処理を行う際に使用するアナライザは同一のものを使用することです。そうしないとトークンの分割方法が一致せず、期待する検索結果が得られなくなる場合があります。さらに日本語アナライザが参照する辞書も同じ内容のものを使用するようにしておきます。
| |
| インデックスを参照して検索を行う処理 |
Webサイトでの全文検索処理を実現する
上記のWindowsアプリケーションで行ったような検索処理をASP.NETによるWebサイトで行えば、Webサイトに全文検索機能を追加できます。ここでは、いまWindowsアプリケーションで実装した処理内容を、今度はASP.NETで実装してみます。
■検索ページ
検索ページには、検索文字列を入力するテキストボックスと、検索を開始するためのボタン、さらに検索にヒットした件数を表示するためのラベルと、検索結果を表示するためのDataListコントロールを配置しています。検索時の画面を次に示します。
![]() |
| ブラウザで検索を実行 |
このページの内容を次に示します。
| |
| 検索ページ |
[検索]ボタンがクリックされてポストバックされると、入力された検索文字列からQueryオブジェクトを作成して検索を行います。
| |
| 検索処理 | |
| 検索結果をDataTableオブジェクトに格納し、DataListコントロールにバインドする。各レコードの表示は、.aspxファイルに記述した<ItemTemplate>要素の内容に従って行われる。 |
なお、Webアプリケーションでは、IISを実行するアカウント(Windows Server 2003では、デフォルトで「Network Service」)がインデックスにアクセスする権限を持っている必要があります。
.NET環境では貴重な全文検索エンジン
Webサイトに全文検索サービスを実装する場合、現在ではGoogleが提供するカスタムサーチやSQL Serverの全文検索機能なども利用できますが、Lucene.NETを用いると、スタティックなHTMLファイルに加えて、データベースやほかの形式のデータからもインデックスを作成して検索処理を実現可能です。
また、ここでは紹介できませんでしたが、このほかにもDocumentオブジェクトに含まれるフィールドごとにアナライザを変更したり、検索時にどのフィールドを対象にするかを指定したりといった細かなコントロールも可能で、目的に応じた柔軟な検索処理が実現できます。
そもそも.NETベースの環境で利用できる全文検索エンジンはそれほど選択肢がありませんが、Lucene.NETは非常に優れた検索エンジンといえます。Lucene.NETの詳細についての日本語のドキュメントは残念ながら豊富ではありませんが、オリジナルであるLuceneについてのドキュメントや書籍などが参考になるでしょう。![]()
| INDEX | ||
| VBで実践! 外部コンポーネント活用術 | ||
| 全文検索エンジン「Lucene.Net」を使う | ||
| 1.Lucene.Netの概要/Lucene.Netによる全文検索処理 | ||
| 2.分解されたトークンの確認/JapaneseAnalyzerを使ってインデックス作成 | ||
| 3.検索アプリケーションを作成/Webサイトでの全文検索処理 | ||
| 「VBで実践! 外部コンポーネント活用術」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
は.NET開発者中心に生まれ変わりました
スポンサーからのお知らせ
.NET開発者中心コーナー
- - PR -
イベントカレンダー
- - PR -




