为什么Graphfilter Lucene不';不行?
我试图测试同义词图,但并没有像我预期的那样工作,也没有返回正确的答案 这是自定义分析器中的createComponents自定义方法为什么Graphfilter Lucene不';不行?,lucene,synonym,Lucene,Synonym,我试图测试同义词图,但并没有像我预期的那样工作,也没有返回正确的答案 这是自定义分析器中的createComponents自定义方法 public SuggestAnalizer(SynonymMap synonymMap) { this.synonymMap = synonymMap; this.stopList = Collections.emptyList(); } @Override protected TokenStrea
public SuggestAnalizer(SynonymMap synonymMap) {
this.synonymMap = synonymMap;
this.stopList = Collections.emptyList();
}
@Override
protected TokenStreamComponents createComponents(String s) {
Tokenizer tokenizer = new StandardTokenizer();
TokenStream tokenStream = new SynonymGraphFilter(tokenizer, synonymMap, true);
tokenStream = new FlattenGraphFilter(tokenStream);
return new TokenStreamComponents(tokenizer, tokenStream);
}
这是测试代码
String entrada = "ALCALDE KOOPER";
String salida = "FEDERICO COOPER";
SynonymMap.Builder builder = new SynonymMap.Builder(true);
CharsRef input = SynonymMap.Builder.join(entrada.split(" "), new CharsRefBuilder());
CharsRef output = SynonymMap.Builder.join(salida.split(" "), new CharsRefBuilder());
builder.add(output, input, true);
suggestAnalizer = new SuggestAnalizer(builder.build());
TokenStream tokenStream = suggestAnalizer.tokenStream("field", entrada2);
assertTokenStreamContents(tokenStream, new String[]{
"FEDERICO"
});
assertAnalyzesTo(suggestAnalizer, entrada, new String[]{
"FEDERICO"
});
我期望断言能够将“ALCALDE KOOPER”字符串更改为她的同义词“FEDERICO COOPER”,但这并没有发生
有人知道我的错误在哪里,或者为什么我的代码不起作用吗?这些行为的原因是,您从中添加了多词同义词
FEDERICO COOPER
到ALCALDE KOOPER
(在代码中,我看到从输出(即FEDERICO COOPER
)到输入(即ALCALDE KOOPER
)添加了链接)
稍后您将测试令牌的同义词FEDERICO
,但它没有连接,这就是为什么会得到空响应和断言错误。因此,如果您要将同义词从FEDERICO
添加到ALCALDE
但是,即使您这样做,构建同义词映射
时也会出现错误,您将ignoreCase
param与true
值一起使用,这意味着:
大小写折叠输入以与字符#toLowerCase(int)匹配。
注意,如果将其设置为true,则在创建同义词映射时,您有责任将输入项小写
因此,您需要在测试中使用小写版本,或者将ignoreCase
设置为false
您可以检查参考代码请告诉我们您看到的错误是什么。@M.Prokhorov我期待断言工作更改其同义词“FEDERICO COOPER”的“ALCALDE KOOPER”字符串,但这没有发生。