我有五个复选框
如果用户选择Search All
,那么我们只需传递索引名称并获取结果,如果用户选择了一个特定于模板的复选框,我们再简单地通过传递模板名称来完成,但如果有两个模板中的任何一个选中复选框(或可能是三个),然后?
我们可以管道分隔templateID吗?
答案 0 :(得分:1)
您可能需要更改高级数据库爬网程序中的方法来处理传入的模板的GUID。SearchParam
类有一个名为TemplateIds
的属性,其复数表示它应允许超过一。但是,如果您查看代码,就会使用它:
templateIds = IdHelper.NormalizeGuid(templateIds);
NormalizeGuid()
方法实际上是only returns a single GUID。因此,我建议您在此处更改ApplyTemplateFilter()
方法以返回多个模板GUID:
protected void ApplyTemplateFilter(CombinedQuery query, string templateIds, QueryOccurance occurance)
{
if (String.IsNullOrEmpty(templateIds)) return;
templateIds = IdHelper.NormalizeGuid(templateIds);
var fieldQuery = new FieldQuery(BuiltinFields.Template, templateIds);
query.Add(fieldQuery, occurance);
}
因此,更改templateIds = IdHelper.NormalizeGuid(templateIds)
以处理多个GUID,可能是通过将输入拆分为|
来获取每个GUID,然后对其中的每个GUID进行规范化,并通过|
再次组合它们。 / p>
答案 1 :(得分:1)
继Mark所说的这可以通过使用以下功能来实现:
protected void ApplyTemplateFilter(CombinedQuery query, string templateIds)
{
if (String.IsNullOrEmpty(templateIds)) return;
var fieldQuery = new CombinedQuery();
var values = IdHelper.ParseId(templateIds);
foreach (var value in values.Where(ID.IsID))
{
AddFieldValueClause(fieldQuery, BuiltinFields.Template, value, QueryOccurance.Should);
}
query.Add(fieldQuery, QueryOccurance.Must);
}