[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つの関数が定義されていることになり、コンパイルできなくなってしまいました。

VB.NET Error

IndexWriterのClose()関数

例にも記載しましたが、IndexWriterのClose()関数が、close()関数との関係でどうしてもVisual Studioではコンパイルできません。従って、IndexWriterのClose()関数をなしでコンパイルすることにしました。

Index化されない

IndexWriterのClose()関数をなしにコンパイルは通りました。そして、無事インデックス作成もファイルが作られていました。しかし、Luke(前回紹介)でインデックスを開こうとすると、エラーになってしまいます。自分でClose()を消したことを忘れ、どうしてインデックス化されないか困ってしまいました。C#のサンプルプログラムは、動くのに。そこで気づいたのが、Close()関数の有無です。Close()関数は、インデックスの最終処理を行うようです。

Luke Index Error

VB.NETではFlexLuceneは使えない

長々とひっぱりましたが、結論としては、VB.NETでは、FlexLuceneは使えないと判断しました。今までの資産がVB.NETであったため、かなりの痛手です。

まとめ

FlexLuceneは、VB.NETでは開発できないことがわかりました。IndexReaderだけであればできるのかもしれませんが、インデックス作成に難があるため、VB.NETのプログラムは、C#への移行をすることにしました。この情報がみなさまにもお役に立てば幸いです。

Translate »