考虑以下搜索:
return SearchClient.Instance.UnifiedSearchFor(Request.Query)
.Filter(x => ((IContent)x).Ancestors().Match([ANCESTOR ID]))
.GetResult();
这样可以正常工作,只要只有一个ANCESTOR ID
可以匹配。没有,有多个 - 但我不确定究竟有多少。
如何在此结果集上执行多个过滤器?
我尝试过什么
var query = SearchClient.Instance.UnifiedSearchFor(Request.Query);
[ANCESTOR IDS].ForEach(o => query.Filter(x => ((IContent)x).Ancestors().Match(o.ToString())));
return query.Skip(offset).GetResult();
这似乎不起作用,不应用过滤器。我认为这是因为方法被链接的方式!?
任何帮助都非常感激。对于帮助我破解它的人来说,桌上有赏金。
我还尝试了什么
var ancestorFilterBuilder = SearchClient.Instance.BuildFilter<MyPageType>();
foreach (var ancestorID in ancestorIDs)
{
ancestorFilterBuilder.Or(o => o.Ancestors().Match(ancestorID.ToString()));
}
.....
SearchClient.Instance.UnifiedSearchFor(Request.Query)
.Filter(ancestorFilterBuilder)......
这也没有成功过滤。
答案 0 :(得分:3)
我确信自己错误地理解了EpiServer API,实际上我的动态构建过滤器的方法是正确的,除了重新分配对过滤器本身的额外Or
调用(受到Ted的启发)提醒我在我正在使用的另一个循环的上下文中这样做:
var ancestorFilterBuilder = SearchClient.Instance.BuildFilter<MyPageType>();
foreach (var ancestorID in ancestorIDs)
{
ancestorFilterBuilder = ancestorFilterBuilder.Or(o => o.Ancestors().Match(ancestorID.ToString()));
}
答案 1 :(得分:1)
我认为您需要在await Task.WhenAll(data.Select(dataPiece => Task.Run(() => DoSomething(dataPiece)))
循环中重新分配query
。
看起来你没有使用返回值,这意味着你的ForEach
对象没有被循环修改。
query