Пользовательский анализатор в 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 за предложение.