Java 在没有索引的情况下使用Lucene Analyzer-我的方法合理吗?

Java 在没有索引的情况下使用Lucene Analyzer-我的方法合理吗?,java,lucene,Java,Lucene,我的目标是利用Lucene的许多标记器和过滤器来转换输入文本,但不创建任何索引 例如,给定这个(人为的)输入字符串 “有人的-[texté]在这里,foo。” …还有像这样的Lucene分析仪 Analyzer analyzer = CustomAnalyzer.builder() .withTokenizer("icu") .addTokenFilter("lowercase") .addTokenFilter("icuFolding")

我的目标是利用Lucene的许多标记器和过滤器来转换输入文本,但不创建任何索引

例如,给定这个(人为的)输入字符串

“有人的-[texté]在这里,foo。”

…还有像这样的Lucene分析仪

Analyzer analyzer = CustomAnalyzer.builder()
        .withTokenizer("icu")
        .addTokenFilter("lowercase")
        .addTokenFilter("icuFolding")
        .build();
我希望获得以下输出:

某人的短信发到这里foo

下面的Java方法符合我的要求

但我是否有更好的(即更典型和/或更简洁的)方法来做这件事?

我特别想到了我使用
TokenStream
CharTermAttribute
的方式,因为我以前从未这样使用过它们。感觉笨重

代码如下:

Lucene 8.3.0进口:

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.custom.CustomAnalyzer;
我的方法:

private String transform(String input) throws IOException {

    Analyzer analyzer = CustomAnalyzer.builder()
            .withTokenizer("icu")
            .addTokenFilter("lowercase")
            .addTokenFilter("icuFolding")
            .build();

    TokenStream ts = analyzer.tokenStream("myField", new StringReader(input));
    CharTermAttribute charTermAtt = ts.addAttribute(CharTermAttribute.class);

    StringBuilder sb = new StringBuilder();
    try {
        ts.reset();
        while (ts.incrementToken()) {
            sb.append(charTermAtt.toString()).append(" ");
        }
        ts.end();
    } finally {
        ts.close();
    }
    return sb.toString().trim();
}

我已经使用这个设置好几个星期了,没有问题。我还没有找到一个更简洁的方法。我认为问题中的代码还可以。

我已经使用这个设置好几个星期了,没有问题。我还没有找到一个更简洁的方法。我认为问题中的代码是可以的