Пользовательский анализатор в Lucene 8.5

Я пытаюсь реализовать CustomAnalyzerс использованием Lucene 8.5. Его цель - расширить запросы синонимами из wordnet. Мой код следующий:

private static CustomAnalyzer customAnalyzer() throws IOException {
        Map<String, String> sargs = new HashMap<>();
        sargs.put("synonyms", "wn_s.pl");
        sargs.put("format", "wordnet");

        CustomAnalyzer.Builder builder = CustomAnalyzer.builder()
                .withTokenizer(StandardTokenizerFactory.class)
                .addTokenFilter(EnglishPossessiveFilterFactory.class)
                .addTokenFilter(LowerCaseFilterFactory.class)
                .addTokenFilter(StopFilterFactory.class)
                .addTokenFilter(PorterStemFilterFactory.class)
                .addTokenFilter(SynonymGraphFilterFactory.class, sargs);
        return builder.build();
}

Однако, когда я запускаю его, я получаю это исключение

java.io.IOException: Resource not found: wn_s.pl
    at org.apache.lucene.analysis.util.ClasspathResourceLoader.openResource(ClasspathResourceLoader.java:77)
    at org.apache.lucene.analysis.synonym.SynonymGraphFilterFactory.loadSynonyms(SynonymGraphFilterFactory.java:179)
    at org.apache.lucene.analysis.synonym.SynonymGraphFilterFactory.inform(SynonymGraphFilterFactory.java:154)
    at org.apache.lucene.analysis.custom.CustomAnalyzer$Builder.applyResourceLoader(CustomAnalyzer.java:544)
    at org.apache.lucene.analysis.custom.CustomAnalyzer$Builder.addTokenFilter(CustomAnalyzer.java:321)
    at Main.customAnalyzer(Main.java:78)
    at Main.main(Main.java:34)

Файл существует, его разрешения верны, и указанное исключение возникает, даже если я использую абсолютный путь.

Любая помощь будет оценена по достоинству.

1 ответ

Проблема заключалась в том, что wn_s.plне было в ClassPath. Я переместил файл вsrc/main/resources каталог, и проблема была исправлена.

Спасибо @Thomas за предложение.

Другие вопросы по тегам