Recherches multiples dans les taxonomies

Un billet de Jeremy Keith m'a donné envie de réactiver les recherches multiples dans les taxonomies du site.

Une fonctionnalité proche existait en 2008 : la possibilité d'effectuer des recherches sur plusieurs taxonomies, du genre « tous les documents portant le tag vess publié en 2008 ». Elle a ensuite disparu avec la refonte des urls (ce qui est mal ! - les changements d'url s'entend). J'avais ensuite essayé de mettre en place quelque chose, sans y parvenir ; les exemples d'urls fournit par Keith m'ont donné envie de retenter une implémentation et, après une petite heure de bidouillage, une nouvelle fonctionnalité voit le jour : la possibilité d'effectuer des requête « ET » et des requêtes « OU ».

/tags/foo|bar/
Url pour afficher les documents portant le tag « foo » OU le tag « bar »
/tags/foo,bar/
Url pour afficher les documents portant le tag « foo » ET le tag « bar »

A noter que l'ordre des valeurs n'a pas d'importance (ce qui n'est pas très « RESTful ») : les urls /tags/foo|bar/ ou /tags/bar|foo/ auront la même signification.

Il est aussi possible de combiner les deux types d'opération :

/tags/foo,bar|baz/
Url pour afficher les documents portant le tag « foo » ET le tag « bar » OU le tag « baz ».

L'utilisation de cette syntaxe peut-être utile pour les tags, voire pour les catégories, bien que peu de documents soient publiés dans plusieurs d'entre elles en même temps. Par contre, elle n'a aucun sens pour les dates : un document à une date de publication unique. On pourrait cependant imaginer une syntaxe alternative pour définir des intervalles de temps :

/dates/2010-09_2010-12/
Url éventuelle pour afficher les documents publiés entre septembre 2010 et décembre 2010.

Reste à mettre en place une interface graphique, à base de formulaire ou d'un champ Suggest. Qu'en à la recherche sur plusieurs catégories, la fonctionnalité revient dans ma liste des tâches.