Lucene.NET 4.8.0: Как с помощью анализатора разбить текст?

Как правильно настроить анализатор для разбития текста?

Например: "st3-g5.my.vk.com" -> "st3" "g5" "my" "vk" "com"

Больше всего подошёл SimpleAnalyzer, но он удаляет числа.

Пробовал создать свой анализатор, но так и не получилось добиться требуемого результата:

public class CustomAnalyzer : Analyzer
{
    protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader)
    {
        StandardTokenizer src = new StandardTokenizer(LuceneVersion.LUCENE_48, reader);

        TokenStream tok = new StandardFilter(LuceneVersion.LUCENE_48, src);
        tok = new LowerCaseFilter(LuceneVersion.LUCENE_48, tok);

        return new TokenStreamComponents(src, tok);
    }

    protected TextReader initReader(string fieldName, TextReader reader)
    {
        NormalizeCharMap.Builder builder = new();
        builder.Add(".", " ");
        builder.Add("_", " ");
        NormalizeCharMap normMap = builder.Build();
        return new MappingCharFilter(normMap, reader);
    }
}

Ответы (1 шт):

Автор решения: Relins

Ошибка была в название метода initReader -> InitReader, теперь все работает.

public class CustomAnalyzer : Analyzer
    {
        private LuceneVersion matchVersion;
    
        public CustomAnalyzer(LuceneVersion matchVersion)
        {
            this.matchVersion = matchVersion;
            BuildMap();
        }
    
        protected override TokenStreamComponents CreateComponents(string fieldName, TextReader reader)
        {
            Tokenizer src = new ClassicTokenizer(matchVersion, reader);
    
            TokenStream tok = new StandardFilter(matchVersion, src);
            tok = new LowerCaseFilter(matchVersion, tok);
            tok = new StopFilter(matchVersion, tok, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
    
            return new TokenStreamComponents(src, tok);
        }
    
        private NormalizeCharMap map;
    
        public void BuildMap()
        {
            NormalizeCharMap.Builder builder = new NormalizeCharMap.Builder();
            builder.Add(".", " ");
            builder.Add("-", " ");
            builder.Add("/", " ");
            map = builder.Build();
        }
    
        protected override TextReader InitReader(string fieldName, TextReader reader)
        {
            return new MappingCharFilter(map, reader);
        }
    }
→ Ссылка