2011-11-08 25 views
0

どういうわけか50-100GBのテキスト行を索引付けしてから、正規表現の検索を高速に実行できる方法はありますか?行ごとに行くよりも少なくとも速い。 正規表現のパターンは必ずしも同じではないため、インデックスを作成する際に考慮することはできません。速い正規表現の検索

Luceneでこれを実現することはできますか? サフィックスツリーでは可能かもしれませんが、インデックスにはあまりにも多くのメモリが必要です(これらの100GBをはるかに上回ります)。

答えて

1

あなたがしなければならない主なことは、共通の検索用語を事前に特定し、それに基づいてインデックスを作成することです。

たとえば、「Foo」で始まる行がたくさん検索されることが予想される場合があります。次に、その検索を事前に実行し、 "Foo"で始まる行のリストを保存することができます。次に、誰かが "Foobar"で始まる行を検索した場合、検索する行の絞込みサブセットがすでに取得済みです。

あなたが本当に巧妙になりたい場合は、一般的な検索をプログラムで分析して、定期的な検索コンポーネントを見つけ出し、それらの共通コンポーネントに基づいてインデックスを作成できます。

+0

私はまた、同様のアプローチを説明する記事を見つけました。それは、k-グラム(これらの行からk個の連続した文字)のインデックスを付けると言います。問題は、検索には任意の数の文字を含めることができ、k-gramごとにインデックスを作成するには多すぎるメモリが必要だということです。いずれにしても、これはテストする価値があります。 – user16367