我不想编写自己的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)
先谢谢..
答案 0 :(得分:0)
传递给builder
的路径不是索引目录,而是它应该查找此分析器的配置资源的位置。 addTokenFilter
的第二个参数是参数列表,而不是同义词映射。
您要做的是将您的同义词列表放入上述目录中的文件中,并将该文件名作为&#34;同义词&#34; addTokenFilter调用中的参数(以及您可能需要的任何其他参数)。