[PC] VB.NETとFlexLuceneの相性× コンパイルできないのでVB.NETを諦める
VB.NETとFlexLuceneの相性の悪さ
以前、このサイトで紹介しましたが、一番最初にLuceneを利用したのは、Lucene.NETです。しかも、@ITの「全文検索エンジン「Lucene.Net」を使う (1/3)」の紹介記事を参考に作成しました。その参考ページが元々VB.NETだったこともあり、VB.NETで実装を行いました(そのまま転用できるし…)。
FlexLuceneのテスト
一方で、FlexLuceneのテストプログラムは、上記の紹介ページを見てもらってもわかるようにC#で記述しました。汎用性が高いかと思って利用しました。インデックス化及び検索ソフトの確認ができたので、Lucene.NETの実装をFlexLuceneに変更することにしました。
VB.NETの問題
C#等のプログラミング言語は、大文字小文字を別々に認識するのに対して、VB.NETでは、大文字小文字を区別しないという特性があります。Microsoftのホームページを見るとVB.NETでは、例えば変数XYZとxyzとは、同じものとみなす現象です。FlexLuceneは、Javaからポーティングされる際に、例えばclose()という小文字の関数をClose()と最初の文字が大文字の関数に変えてC#の記載に馴染む形に書き換えています。ところがそれが仇となり、VB.NETでは、2つの関数が定義されていることになり、コンパイルできなくなってしまいました。
IndexWriterのClose()関数
例にも記載しましたが、IndexWriterのClose()関数が、close()関数との関係でどうしてもVisual Studioではコンパイルできません。従って、IndexWriterのClose()関数をなしでコンパイルすることにしました。
Index化されない
IndexWriterのClose()関数をなしにコンパイルは通りました。そして、無事インデックス作成もファイルが作られていました。しかし、Luke(前回紹介)でインデックスを開こうとすると、エラーになってしまいます。自分でClose()を消したことを忘れ、どうしてインデックス化されないか困ってしまいました。C#のサンプルプログラムは、動くのに。そこで気づいたのが、Close()関数の有無です。Close()関数は、インデックスの最終処理を行うようです。
VB.NETではFlexLuceneは使えない
長々とひっぱりましたが、結論としては、VB.NETでは、FlexLuceneは使えないと判断しました。今までの資産がVB.NETであったため、かなりの痛手です。
まとめ
FlexLuceneは、VB.NETでは開発できないことがわかりました。IndexReaderだけであればできるのかもしれませんが、インデックス作成に難があるため、VB.NETのプログラムは、C#への移行をすることにしました。この情報がみなさまにもお役に立てば幸いです。