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

前端 未结 2 1182
悲哀的现实
悲哀的现实 2020-12-22 00:44

I have Five check boxes

  • Search All
  • Template 1
  • Template 2
  • Template 3
  • Template 4

If user selects Search

相关标签:
2条回答
  • 2020-12-22 01:25

    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 |.

    0 讨论(0)
  • 2020-12-22 01:34

    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);
    }
    
    0 讨论(0)
提交回复
热议问题