我建议不要将自动完成与正则表达式查询拼凑在一起,而是看一下Lucene Suggest API。
除此之外,您并没有真正说明您当前的实现是如何工作的。但是,如果您不想在只输入当前单词的两个字母时进行搜索,那么就不要调用搜索。
如果您说您确实想要搜索,但想要忽略所有包含 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.*
”,则需要自己实现该转换。