【问题标题】:Custom Analyzer in Lucene 8.5Lucene 8.5 中的自定义分析器
【发布时间】:2020-05-20 11:00:08
【问题描述】:

我正在尝试使用 Lucene 8.5 实现 CustomAnalyzer。其目的是使用 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)

文件存在,权限正确,使用绝对路径也会出现指定异常。

任何帮助将不胜感激。

【问题讨论】:

  • 好吧,ClasspathResourceLoader 表示资源应该在类路径中。你把它放在那里了吗?如果有,怎么做?
  • 就是这样。我已经把它放在src/main/resources 中,它现在可以工作了。谢谢

标签: java lucene wordnet keyword-expansion


【解决方案1】:

问题是 wn_s.pl 不在 ClassPath 中。我将文件移至src/main/resources 目录,问题已解决。

感谢@Thomas 的建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    相关资源
    最近更新 更多