我正在尝试通过Sitecore ContentSearch构建一个包含可选术语的lucene查询。可选术语用于提升某些结果。 lucene查询应如下所示:
+(+(_content:myquery keywords:myquery) boostfield:boostdata)
我如何构建这样的查询?使用PredicateBuilder,我只能添加And / Or表达式。
以下是我如何构建谓词的示例:
var contentPredicate = PredicateBuilder.Create<MySearchResultItem>(p => p.Content == parameters.QueryString);
contentPredicate = contentPredicate.Or(k => k.Keywords == "myquery");
mainPredicate = mainPredicate.And(contentPredicate);
mainPredicate = mainPredicate.And(f => f["boostfield"] == "boostdata");
这将使“boostfield”成为必须字段,这不是我需要的(注意字段名称前面的+):
+(+(_content:myquery keywords:myquery) +boostfield:boostdata)
有没有办法实现这个目标?
答案 0 :(得分:0)
试试这个:
var contentPredicate = PredicateBuilder.Create<MySearchResultItem>(p => p.Content == parameters.QueryString);
contentPredicate = contentPredicate.Or(k => k.Keywords == "myquery");
mainPredicate = mainPredicate.And(contentPredicate);
var boostQuery = PredicateBuilder.False<MySearchResultItem>();
boostQuery = boostQuery.Or(f => f["boostfield"] == "boostdata");
mainPredicate = mainPredicate.Or(boostQuery)
我认为它可以为您提供所需的结果。
答案 1 :(得分:0)
如果您只是想根据可选字段提升结果,可以按如下方式设置谓词构建器:
boostfield.contains("term") or field.contains("term")
然后增加字段项本身的标准字段中的提升值。构建谓词的顺序与结果有关,因此请务必先检查boost字段。