我们可以在templateId中分配多个模板ID(就像我们在relatedId中一样),同时使用Lucene进行搜索?

时间:2012-03-15 08:13:52

标签: c# lucene sitecore

我有五个复选框

  • 全部搜索
  • 模板1
  • 模板2
  • 模板3
  • 模板4

如果用户选择Search All,那么我们只需传递索引名称并获取结果,如果用户选择了一个特定于模板的复选框,我们再简单地通过传递模板名称来完成,但如果有两个模板中的任何一个选中复选框(或可能是三个),然后?

我们可以管道分隔templateID吗?

2 个答案:

答案 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);
}