Lucene 提升不起作用

Lucene boosting not working

我正在为文档编制索引并按如下方式设置提升:

document.SetBoost(5f);

因为我想让某些文档出现在前面。例如,我想先显示最近的新闻。

当我搜索时,像这样:

var parser = new QueryParserEx(Version.LUCENE_29, "contents", analyzer);
parser.SetDefaultOperator(QueryParser.Operator.AND);
parser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);

Query query;
query = parser.Parse("text*");

查询被解析为 WildcardQuery 并且在内部它使用这个:

{Lucene.Net.Search.MultiTermQuery.AnonymousClassConstantScoreAutoRewrite}

不确定为什么它仍在使用 Constant Score 重写器。有人可以解释吗?

我也认为我不能在搜索时使用提升,因为我不需要提升某些术语,但某些文档(例如,最新消息首先出现)。

PS:这是 不是 this question 的副本。

没关系。我使用的是 QueryParser 的自定义实现,它覆盖了方法 NewTermQuery

像这样:

protected override Query NewTermQuery(Term term)
{
    var field = term.Field();
    var text = term.Text() ?? "";
    if (field == "contents" &&
        text.Length >= 3 &&
        text.IndexOfAny(new[] { '*', '?' }) < 0)
    {
        var wq = new WildcardQuery(new Term(field, text + "*"));
        return wq;
    }
    return base.NewTermQuery(term);
}

并且 WildcardQuery 没有采用该配置。我所要做的就是在 if.

中调用 wq.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);