Can we assign more then one template ID in templateId (like we do in relatedId), while searching with Lucene?

萝らか妹 提交于 2019-11-29 16:52:19

You may need to change the method in the Advanced Database Crawler to handle the GUIDs of templates passed in. The SearchParam class has a property called TemplateIds which by being plural indicates it should allow more than one. However, if you look into the code, this is how it is used:

templateIds = IdHelper.NormalizeGuid(templateIds);

The NormalizeGuid() method actually only returns a single GUID. So I recommend you alter the ApplyTemplateFilter() method here to return multiple Template GUIDs:

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

So change templateIds = IdHelper.NormalizeGuid(templateIds) to handle multiple GUIDs, perhaps by splitting the input at a | to get each GUID then normalizing each one of those and combining them again via a |.

Jagmohan - UniColumn

Further to what Mark said this can be achieved by using below 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);
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!