オートコンプリートと正規表現クエリを組み合わせるよりも、Lucene Suggest APIを参照することをお勧めします。
それを除けば、現在の実装がどのように機能するかについてはあまり言いません。ただし、現在の単語が 2 文字しか入力されていないときに検索したくない場合は、単に search を呼び出さないでください。
検索したいが、2 文字以下のすべての単語を無視したいという場合は、標準のトークン化されたクエリを使用し、LengthFilterでアナライザーを適用することをお勧めします。カスタムAnalyzerをまとめる方法がわからない場合は、次のような Lucene ドキュメントの例から作業してください。
Analyzer analyzer = new Analyzer() {
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
Tokenizer source = new FooTokenizer(reader); //ex. StandardAnalyzer
TokenStream filter = new FooFilter(source); //ex. StandardFilter, LowercaseFilter, StopFilter, etc.
filter = new BarFilter(filter);
filter = new LengthFilter(true, filter, 3, Integer.MAX_VALUE);
return new TokenStreamComponents(source, filter);
}
};
正規表現クエリに関しては、" this and that a.*
" を " this and that.*
" に変換する必要がある場合は、その変換を自分で実装する必要があります。