Javaで約100GBの大きなファイルの文字列を検索するためのJavaの組み込みライブラリはありますか?私は現在二分探索を使用していますが、それほど効率的ではありません。
2 に答える
検索用に構築されたツールを使用したくない場合は、データをDBに保存し、sqlを使用します。
私の知る限り、Javaには、インデックスの有無にかかわらず、ファイル検索エンジンは含まれていません。それにも非常に理由があります。検索エンジンの実装は、入力データセットと検索パターン形式の両方に本質的に関連付けられています。どちらかを少し変更すると、検索エンジンが大幅に変更される可能性があります。
より具体的な回答を提供できるようにするには、次のことを行う必要があります。
データセットを正確に記述します。ファイルの数、パス構造、平均サイズ、各エントリの形式、および含まれている各トークンの形式です。
検索パターンを正確に説明してください。これらの固定文字列、グロブパターン、または正規表現ですか。パターンが完全な行または各行の特定のトークンと一致することを期待していますか?
希望する検索結果を正確に説明してください。完全一致または近似一致が必要ですか。ファイル内の位置を取得しますか、それとも特定のトークンを抽出しますか?
要件を正確に説明してください。事前にインデックスを作成できますか?データセットはリアルタイムで変更されることが期待されていますか?
この種の作業用に正確に設計されたLuceneなどのサードパーティライブラリを使用できない理由を説明してください。
の複雑さを持つはずの現在の二分探索が十分に効率的でない理由を説明してください。一定の複雑さでより高速になる可能性
O(logn)
がある唯一のことは、ハッシュテーブルの使用を伴うでしょう。
問題をより広い意味で説明するのが最善かもしれません。たとえば、サンプルデータセットから、単語のセットと関連するオフセットまたはドキュメント識別子リストであると想定する場合があります。このようなセットでの検索にアプローチする簡単な方法は、単語/ファイル位置のインデックスをハッシュテーブルに格納して、関連する各リストに一定時間でアクセスできるようにすることです。