ScorePayload不会在CustomSimilarity上被调用

问题描述 投票:0回答:1

我关注了此博文,但在lucene.net中:

https://lucidworks.com/post/getting-started-with-payloads/

这是我自定义相似度的外观:

public class PayloadSimilarity : DefaultSimilarity
{
    public override float ScorePayload(int doc, int start, int end, BytesRef payload) 
    {
        var score = PayloadHelper.DecodeSingle(payload.Bytes, start);

        return score;
    }
}

然后,正如博客文章所提到的,我为搜索器和索引器设置了相似性。幸运的是,我可以看到有效载荷在那里。而且,如果我搜索有效载荷,它不会给我任何回报,所以我认为有效载荷就在那儿,但搜索器不会考虑该帐户。

我将查询解析器与Searcher和自定义相似性结合使用。

解释表明使用了我的自定义相似性,但没有显示使用了ScorePayload,如果在其中放置断点,它当然不会在ScorePayload函数中中断。

谢谢您的帮助!

P.S:这就是我构建分析器的方式:

    public static Analyzer WithTermBasedBoosting(char delimiter) => CustomAnalyzer
        .WithTokenizer("WhitespaceTokenizer")
        .AddTokenFilter("DelimitedPayloadTokenFilter")
        .With(delimiter,new SingleEncoder())
        .Build();

为了简单起见,我用最少的东西创建了另一个分析器:

    public static Analyzer MyDelimited(char delimiter) => Analyzer.NewAnonymous(createComponents: (fieldName, reader) =>
    {
        Tokenizer source = new WhitespaceTokenizer(CustomAnalyzer.Version, reader);

        TokenStream filter = new DelimitedPayloadTokenFilter(source, delimiter, new SingleEncoder());

        return new TokenStreamComponents(source, filter);
    });
c# .net lucene.net
1个回答
0
投票

似乎答案很简单,您不能使用普通的QueryParser,因为它没有考虑有效负载。我发现了一个QueryTerm类型,即PayloadTermQuery,现在我的查询看起来像这样:

© www.soinside.com 2019 - 2024. All rights reserved.