我们可以在templateId中分配多个模板ID(就像我们在relatedId中那样),同时使用Lucene进行搜索?
我有五个复选框
- 全部搜索
- 模板1
- 模板2
- 模板3
- 模板4
如果用户选择Search All
,那么我们只需传递索引名称并获取结果,如果用户选择模板特定复选框之一,我们可以再次通过传递模板名称,但如果有两个模板中的任何一个复选框(或者可能是三)检查,然后?
我们可以管道分离templateID吗?
您可能需要更改高级数据库爬网程序中的方法来处理传入的模板的GUID SearchParam
类有一个名为TemplateIds
的属性,它通过复数表示它应该允许多个。 但是,如果您查看代码,这是它的使用方式:
templateIds = IdHelper.NormalizeGuid(templateIds);
NormalizeGuid()
方法实际上只返回一个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并通过|
再次组合它们 。
继Mark所说的这可以通过使用以下function来实现:
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); }