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);
我正在为文档编制索引并按如下方式设置提升:
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);