Recherche dans les champs répétables et les groupes de champs

Vous pouvez utiliser l'opérateur WHEN avec les champs répétables et les groupes de champs. WHEN est un opérateur AND qui implique que les deux valeurs saisies se trouvent dans la même occurrence.

Recherche combinée dans les champs répétables

copy.number dans une source de données de bibliothèque est un champ répétable. Au moment de chercher dans des champs répétables, une recherche combinée comme :

copy.number > x AND copy.number < y

parvient à des résultats différents de ce à quoi vous pourriez vous attendre. Toutes les notices avec au moins un numéro de copie plus grand que x et un (autre) numéro de copie moins grand que y sera trouvé. C'est parce que le système regarde la valeur de numéro de copie au niveau de la notice.

Si vous voulez que ne soient retrouvées que les notices pour lesquelles une unique valeur de numéro de copie est à la fois plus grande que x et moins grande que y, vous devrez utiliser l'opérateur WHEN :

copy.number > x WHEN copy.number < y

Cela produira en résultat toutes les notices avec au moins une valeur de numéro de copie entre x et y.

Recherche combinée dans les groupes de champs

Le champ creator dans une source de données de musée est groupé avec le champ creator.role.
M.C. Escher est un graveur auteur de quelques gravures tout en étant l'imprimeur de gravures dont il n'est pas l'auteur. Si vous voulez sélectionner les gravures dont Escher a été l'imprimeur, alors utilisez la formule de recherche suivante :

creator = escher* WHEN creator.role = printer

Ainsi donc, WHEN n'est pas nécessairement à utiliser dans une requête avec seulement un champ. Il est possible de comparer des valeurs dans différents champs aussi, et de combiner ces requêtes tant que ces champs sont groupés, et cela est accompli par occurrence : dans une combinaison WHEN, deux requêtes simples sont implicitement et répétitivement combinées pour la nième occurrence des deux champs dans ces requêtes.

S'il y a un nombre inégal de valeurs des deux côtés de WHEN, la dernière valeur à partir de la liste la plus courte sera utilisée à nouveau :

creator=escher*,anthonisz* WHEN creator.role=printer,artist,engraver

revient au même que :

(creator = escher* WHEN creator.role = printer) OR (creator = anthonisz* WHEN creator.role = artist) OR (creator = anthonisz* WHEN creator.role = engraver)

WHEN NOT

WHEN NOT fonctionne de la même façon que WHEN, à la différence qu'ici, la première valeur doit et la seconde ne doit pas apparaître dans la même occurrence (du groupe), par exemple :

creator = escher* WHEN NOT creator.role = printer

Cette requête retourne tous les objets qui contiennent les occurrences de Escher comme créateur où le rôle correspondant n'est pas "imprimeur", même si la notice contient une autre occurrence de Escher comme créateur où le rôle correspondant est "imprimeur".

Une recherche avec WHEN NOT peut être lente si la première moitié de la requête récupère beaucoup de notices, mais il y a un moyen d'obtenir plus rapidement les mêmes résultats en reformulant cette recherche en utilisant à la place AND NOT et WHEN. L'exemple ci-dessus devient alors :

creator = escher* AND NOT (creator = escher* WHEN creator.role = printer)

Limitations dans l'usage de WHEN et de WHEN NOT

WHEN ou WHEN NOT ne peuvent apparaître qu'une seule fois dans une formule de recherche, comme dans la syntaxe : <equation> WHEN (NOT) <equation>. Il n'est pas possible de combiner plus de deux équations à l'aide de plusieurs WHENs.
Ainsi, vous ne pouvez pas utiliser d'opérateurs hiérarchiques, comme narrower, en combinaison avec WHEN.