2011-01-28 9 views
0

これは可能ですか?私はデータベースに直接アクセスすることはできません - データオブジェクトを通してのみ。 アイテムがArrayListのようなもので返された場合、インデックスを検索できますか?Javaのデータオブジェクトを使用したデータベースのluceneインデックス

これができない場合は、Lucene(または他のツール)を使用して、Javaを使用してオブジェクトに対してファジーマッチングを実行する方法がありますか?

たとえば、FirstNameとLastNameを持つPersonオブジェクトがあります。私はその名前にあいまいなマッチをしたい。 だから、x個のPersonオブジェクトの配列があるとします。それぞれのPersonオブジェクトをループして名前を比較する効率的な方法がありますか?

答えて

0

これらのデータオブジェクトを取り出し、必要なフィールドを格納して別のLuceneインデックスを作成します。 Personサンプルを使用すると、すべてのLuceneドキュメントは[Id、FirstName、LastName]になります。この索引を検索すると、完全なデータ・オブジェクトをデータベースに照会するために必要なIDが戻されます。

実際のインデックス作成は簡単です。データオブジェクトのリストを取得し、繰り返し、Luceneドキュメントを生成し、IndexWriterを使用して格納するだけで済みます。永続ストレージ用のファイルシステムディレクトリまたはインメモリストレージのいずれかに対して作業することができます。

0

これは私が思いついた解決策です - しかし、FSDirectory(プロジェクトの仕様ではこれを許可していません)にインデックスを保存することはできません。また、RAMDirectoryでは、必要な人物が何千もあります検索するために、メモリ内ストレージがこの状況に最適かどうかはわかりません。

大規模なデータセットに効率的なファジーマッチアルゴリズムがありますか?

+0

私はこれが答えであると信じています。数千のドキュメントはLuceneの問題ではなく、1kbのドキュメントはそれぞれ10MBのメモリしかありません。私はあなたが使用しようとしているfzzuアルゴリズムを知っていませんが、Levensthein距離で使用してファジーマッチを可能にするBKTree構造を調べたいと思うかもしれません。 – sisve

関連する問題