ContentSearch查询中的可选术语

时间:2014-08-24 19:43:15

标签: lucene sitecore sitecore7

我正在尝试通过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)

有没有办法实现这个目标?

2 个答案:

答案 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字段。