Lucene(Java)中PatternReplaceCharFilterFactory调用参数问题求助
解决Lucene CustomAnalyzer中使用PatternReplaceCharFilterFactory移除指定字符的问题
问题根源
你调用addCharFilter的方式不符合Lucene API规范,CustomAnalyzer.builder的addCharFilter方法不需要直接传入Pattern或Reader,而是要给PatternReplaceCharFilterFactory传递键值对形式的配置参数,由工厂类自行创建对应的CharFilter。另外你写的正则([^a-z])是匹配所有非小写字母,和你要移除{、}、;的需求不匹配。
正确实现代码
public static ArrayList<String> analyzer_codigo(String texto) throws IOException { // 构建CustomAnalyzer并配置字符过滤规则 Analyzer ana = CustomAnalyzer.builder(Paths.get(".")) // 给PatternReplaceCharFilterFactory传入配置:匹配{、}、;,替换为空字符串 .addCharFilter(PatternReplaceCharFilterFactory.class, "pattern", "[{;}]", "replacement", "") .withTokenizer(StandardTokenizerFactory.class) .addTokenFilter(LowerCaseFilterFactory.class) .build(); return muestraTexto(ana, texto); }
关键说明
PatternReplaceCharFilterFactory的核心配置参数是pattern(匹配规则的正则表达式)和replacement(替换后的内容),必须以键值对的形式传递给addCharFilter方法。- 正则
[{;}]表示匹配{、;、}中的任意一个字符,在Java字符串里无需额外转义——因为在正则字符类[]内部,{和}属于普通字符。 - 不需要手动创建
Reader,Analyzer在处理输入文本时会自动生成对应的Reader实例,你只需在调用分析逻辑时传入目标文本即可。 - 如果后续需要移除更多字符,直接在正则的
[]中添加对应字符即可,比如要加(就写成[{;}(]。
内容的提问来源于stack exchange,提问作者leyva_7
相关产品推荐
相关产品推荐

