Следующий пользовательский анализатор справляется с задачей:
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.core.KeywordTokenizer;
import org.apache.lucene.analysis.de.GermanNormalizationFilter;
import org.apache.lucene.analysis.miscellaneous.ASCIIFoldingFilter;
public final class KeywordAnalyzerDE extends Analyzer {
public KeywordAnalyzerDE() {
}
@Override
protected TokenStreamComponents createComponents(final String fieldName) {
final Tokenizer source = new KeywordTokenizer();
TokenStream result;
result = new GermanNormalizationFilter(source);
result = new ASCIIFoldingFilter(result);
return new TokenStreamComponents(source, result);
}
}
Ключ GermanNormalizationFilter
:
Он учитывает тот факт, что ä, ö и ü иногда пишутся как ae, oe и ue.
- 'ß' заменяется на 'ss'
- 'ä', 'ö', 'ü' заменяются на 'a', ' o ',' u 'соответственно.
- ' ae 'и' oe 'заменены соответственно на' a 'и' o '.
- ' ue 'заменено на' u ', когда не следует гласная или q.
Я добавил ASCIIFoldingFilter
на всякий случай, если в обработанном тексте есть другие диакритические знаки c.
Просмотр Исходный код был действительно полезным: