Как убрать пробелы и специальные символы во время индексации с помощью hibernate-поиска / lucene - PullRequest
0 голосов
/ 05 октября 2011

У меня есть поле, которое я хотел бы рассматривать как одну строку, при этом удаляя из нее все не алфавитно-цифровые символы.

Например, я хотел бы маркировать "123 456.78-9" как "123456789". Для этого я пытался определить свой собственный анализатор. Согласно странице solr, KeywordTokenizerFactory будет обрабатывать строку как один термин, и я могу использовать PatternReplaceFilterFactory для удаления символов, как я собираюсь.

Я использую следующее определение в своем коде, и оно не работает:

@AnalyzerDef(name = "strippinganalyzer",
    tokenizer = @TokenizerDef(factory = KeywordTokenizerFactory.class),
    filters = {
            @TokenFilterDef(factory = PatternReplaceFilterFactory.class,
                    params = { 
                        @org.hibernate.search.annotations.Parameter(name = "pattern", value="([^a-zA-Z0-9])"),
                        @org.hibernate.search.annotations.Parameter(name="replacement", value=""),
                        @org.hibernate.search.annotations.Parameter(name="replace", value="all")
                    }
            )
    })

Это соответствует «123 *», но не «1234 *» и т. Д. Что мне не хватает?

Спасибо

1 Ответ

3 голосов
/ 06 октября 2011

Создание пользовательского анализатора, кажется, делает свое дело:

public class AlphanumericAnalyzer extends Analyzer {

    @Override
    public TokenStream tokenStream(String fieldName, Reader reader) {

        return new TrimFilter(new PatternReplaceFilter(new LowerCaseFilter(new KeywordTokenizer(reader)), Pattern.compile("[^a-zA-Z0-9]"), "", true), true);
    }
}
...