如何在Lucene 6.2.0的CustomAnalayzer中使用SynonymMap

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Lucene 6.2.0的CustomAnalayzer中使用SynonymMap相关的知识,希望对你有一定的参考价值。

我不想编写自己的Analyzer类。我已经看到了apache lucene CustomAnalyzer提供的新功能,您可以在其中构建自己的自定义分析器。

Analyzer ana = CustomAnalyzer.builder(Paths.get(index))
.withTokenizer(StandardTokenizerFactory.class).addTokenFilter(LowerCaseFilterFactory.class)
.addTokenFilter(StandardFilterFactory.class).build();

所以在这里我想为addTokenFilter(SynonymFilter.class)添加一个选项,我将默认值传递给分析器,如synonymMap,tokenstream和所有内容,所以我只想问...

addTokenFilter(StopFilterFactory.class, "ignoreCase", "false", "words", "stopwords.txt", "format", "wordset")

我已经看到这个例子可以像这里一样使用StopFilter定义是否可以在自定义分析器内部使用SynonymMap ..如果是,那么如何这样做..同义词过滤器的构造函数就是这样的..

HashMap<String, String> synonymMap = new HashMap<String, String>(10);
    synonymMap.put("synonyms", "Facebook");

我是这样做的

 SynonymMap.Builder builder = new SynonymMap.Builder(true);
    builder.add(new CharsRef("Facebook"), new CharsRef("YearBook,FaceB00k"), true);
    builder.add(new CharsRef("Facebook1"), new CharsRef("Fraud"), false);
    builder.add(new CharsRef("Suzie"), new CharsRef("Susan"), false);
    SynonymMap map = null;
    try {
        map = builder.build();
    } catch (IOException e) {
        e.printStackTrace();
    }
    Analyzer ana = CustomAnalyzer.builder(Paths.get(index))
            .withTokenizer(StandardTokenizerFactory.class)
            .addTokenFilter(StandardFilterFactory.class)
            .addTokenFilter(LowerCaseFilterFactory.class)
            .addTokenFilter(SynonymFilterFactory.class,synonymMap)
            .build();

它给我这样的错误

Exception in thread "main" java.io.IOException: Resource not found: Facebook
at org.apache.lucene.analysis.util.ClasspathResourceLoader.openResource(ClasspathResourceLoader.java:67)

提前致谢..

答案

传递给builder的路径不是索引目录,而是应该在哪里查找此分析器的配置资源。 addTokenFilter的第二个参数是参数列表,而不是同义词映射。

你想要做的是将你的同义词列表放在上面提到的目录中的文件中,并将该文件名作为addTokenFilter调用中的“synonym”参数传递(以及你可能需要的任何其他参数)。

以上是关于如何在Lucene 6.2.0的CustomAnalayzer中使用SynonymMap的主要内容,如果未能解决你的问题,请参考以下文章

如何对用 lucene 索引的文档进行分类

Lucene 是如何组织和遍历倒排索引的?

如何在 Lucene 3.5.0 中提取文档术语向量

如何在 Hibernate Search/Lucene 中禁用默认评分/提升?

如何在Lucene中搜索特定范围内的词

如何提高在Lucene搜索结果中的默认排序?