文が 1000 個しかない場合は、lucene のような強力なインデクサーはおそらく必要ありません。「文を完成させる」という提案をしたいのか、それとも「同じキーワードを持つ他のクエリを提案する」という提案をしたいのか、私にはわかりません。両方の解決策は次のとおりです。
ユーザーが入力した文を完成させたいと仮定すると、すべての文字列を に入れSortedSet
、メソッドを使用しtailSet
て入力文字列よりも「大きい」文字列のリストを取得できます (文字列コンパレータはstringA
で始まるより長い文字列は、B
よりも「大きい」と見なされますB
)。次に、によって返されたセットの上位のいくつかのエントリを反復処理して、最初の文字が入力文字列と一致する文字tailSet
列のセットを作成します。最初の文字が入力文字列と一致しなくinputString.length()
なったらすぐに反復を停止できます。inputString.length()
「文を完成させる」提案の代わりにキーワードの提案を行いたい場合、オーバーヘッドは、文の長さと、文に含まれる一意の単語の数によって異なります。このセットが十分に小さい場合は、HashMap<String,Set<String>>
キーワードをそれらを含む文にマッピングした . 次に、セットを交差させることにより、複数単語のクエリを処理できます。
どちらの場合も、おそらく最初にすべての文字列を小文字に変換します (それがアプリケーションで適切であると仮定します)。どちらのソリューションも、何十万もの提案に拡張できるとは思いません。それらのどちらかがあなたが望むことをしますか?必要に応じてコードを提供します。