我正在为文档建立索引,并将boost设置为:
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}不知道为什么它还在用一个固定的分数重写器。有人能解释一下吗?
我也认为我不能在搜索时使用增强,因为我不需要增加某些术语,但某些文件(例如,最近的新闻出现在第一位)。
PS:这是,不是,是this question的副本。
发布于 2018-02-19 15:59:06
不要紧。我使用的是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并没有采用这种配置。我所要做的就是在那个wq.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE);中调用if。
https://stackoverflow.com/questions/48834894
复制相似问题