为什么Graphfilter Lucene不';不行?

为什么Graphfilter Lucene不';不行?,lucene,synonym,Lucene,Synonym,我试图测试同义词图,但并没有像我预期的那样工作,也没有返回正确的答案 这是自定义分析器中的createComponents自定义方法 public SuggestAnalizer(SynonymMap synonymMap) { this.synonymMap = synonymMap; this.stopList = Collections.emptyList(); } @Override protected TokenStrea

我试图测试同义词图,但并没有像我预期的那样工作,也没有返回正确的答案

这是自定义分析器中的createComponents自定义方法

    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”字符串,但这没有发生。