我关注了此博文,但在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);
});
似乎答案很简单,您不能使用普通的QueryParser,因为它没有考虑有效负载。我发现了一个QueryTerm类型,即PayloadTermQuery,现在我的查询看起来像这样: