Pouvons-nous affecter plus d’un identifiant de modèle dans templateId (comme nous le faisons dans relatedId) lors d’une recherche avec Lucene?

J’ai cinq cases à cocher

  • Rechercher tout
  • Modèle 1
  • Modèle 2
  • Modèle 3
  • Modèle 4

Si l’utilisateur sélectionne Search All , alors nous pouvons simplement passer le nom de l’index et obtenir le résultat. S’il sélectionne une case à cocher spécifique au modèle, nous pouvons le faire simplement en passant le nom du modèle, mais si l’une des deux cases à cocher est spécifique (ou peut être trois) sont vérifiés, alors?

Pouvons-nous séparer les templateID?

Vous devrez peut-être modifier la méthode dans l’explorateur de firebase database avancé pour gérer les GUID des modèles transmis. La classe SearchParam a une propriété appelée TemplateIds qui, en étant plurielle, indique qu’elle doit en autoriser plusieurs. Cependant, si vous regardez dans le code, voici comment il est utilisé:

 templateIds = IdHelper.NormalizeGuid(templateIds); 

La méthode NormalizeGuid() ne renvoie en réalité qu’un seul GUID . Je vous recommande donc de modifier la méthode ApplyTemplateFilter() ici pour renvoyer plusieurs GUID de modèle:

 protected void ApplyTemplateFilter(CombinedQuery query, ssortingng templateIds, QueryOccurance occurance) { if (Ssortingng.IsNullOrEmpty(templateIds)) return; templateIds = IdHelper.NormalizeGuid(templateIds); var fieldQuery = new FieldQuery(BuiltinFields.Template, templateIds); query.Add(fieldQuery, occurance); } 

Donc, changez templateIds = IdHelper.NormalizeGuid(templateIds) pour gérer plusieurs GUID, peut-être en fractionnant l’entrée en un | pour obtenir chaque GUID puis normaliser chacun d’eux et les combiner à nouveau via un | .

En complément de ce que Mark a dit, ceci peut être réalisé en utilisant la fonction ci-dessous:

 protected void ApplyTemplateFilter(CombinedQuery query, ssortingng templateIds) { if (Ssortingng.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); }