我们可以在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); }