C# 如何使Sitecore内容搜索增强在表达式树中工作

C# 如何使Sitecore内容搜索增强在表达式树中工作,c#,linq,sitecore,lucene.net,solr-boost,C#,Linq,Sitecore,Lucene.net,Solr Boost,我正在尝试创建一个Sitecore搜索实现,允许内容编辑器定义要搜索的项目属性,并针对这些字段单独设置boost值 为此,我使用表达式树构建谓词,如下所示: foreach (KeyValuePair<string, float> searchResultProperty in searchResultProperties) { Expression constant = Expression.Constant(term); ParameterExpression p

我正在尝试创建一个Sitecore搜索实现,允许内容编辑器定义要搜索的项目属性,并针对这些字段单独设置boost值

为此,我使用表达式树构建谓词,如下所示:

foreach (KeyValuePair<string, float> searchResultProperty in searchResultProperties)
{
    Expression constant = Expression.Constant(term);
    ParameterExpression parameter = Expression.Parameter(typeof(FAQSearchResultItem), "s");
    Expression property = Expression.Property(parameter, typeof(FAQSearchResultItem).GetProperty(searchResultProperty.Key));
    Expression expression = Expression.Equal(property, constant);
    predicate = predicate.Or(Expression.Lambda<Func<FAQSearchResultItem, bool>>(expression, parameter)).Boost(searchResultProperty.Value);
}

return predicate;
但是,我要使用的方法的计算结果是:

{param => ((True AndAlso (False OrElse (param.Question == "water"))) AndAlso (param.Language == Context.Language.Name))}
在没有施加助力的情况下


如何将boost添加到使用表达式树生成的谓词中?

最后,我不得不求助于使用谓词生成器,它似乎对boost具有内置支持。很遗憾,我无法使用反射来获取SearchResultObject的属性,但我可以实现我的目标。。。只是有更多的代码

var query = _context
                .GetQueryable<FAQSearchResultItem>();

query = query
   .Where(s => (s.Question == term).Boost(1.1f)
    || (s.WebsiteAnswer == term).Boost(1.5f));
{s => ((s.Question == "water").Boost(1.1) OrElse (s.WebsiteAnswer == "water").Boost(1.5))}
{param => ((True AndAlso (False OrElse (param.Question == "water"))) AndAlso (param.Language == Context.Language.Name))}