Wiki de Guygle - /search

# Documentation de la recherche avancée

## Table des matières

- Introduction

- Syntaxe générale

  - Types d'objets

  - Types de recherches

  - Tolérance sur la syntaxe

  - Tolérance sur les valeurs

  - Utiliser un mot-clef comme valeur

- Recherche simplifiée

  - Recherche d'un objet dont on connaît l'identifiant

  - Recherche d'objet par mots-clefs

  - Recherche d'objets parmi une liste d'identifiants avec `parmi`

- Recherche en fonction de la valeur d'un champ

  - Champs

  - Critères de comparaisons généraux

  - Critères de comparaison textuels

  - Critères de comparaison numériques

  - Syntaxe des valeurs numériques

  - Syntaxe des dates

- Recherche d'objets liés

  - Le mot-clef `avec`

  - Le mot-clef `avec éventuellement`

  - Le mot-clef `sans`

  - Recherches imbriquées

- Recherche géographique

  - Recherche au sein d'une zone

  - Recherche de proximité

- Recherches sur les étiquettes

- Recherches spéciales

  - Recherche sans critère

  - Recherche générique

  - Raccourcis de recherche

- Présentation du résultat

  - Tri par ordre décroissant

  - Tri par rapport à un champ donné

## Introduction

Pour effectuer une recherche avancée dans Omogen, il faut cliquer sur le menu Recherche puis sur l'entrée Recherche avancée....

Une boîte de dialogue permettant de saisir la description de la recherche à effectuer s'affiche.

Cette description suit une syntaxe précise, proche du français. Cette syntaxe est décrite dans le document présent.

Attention : des exemples de recherche sont donnés dès le début de la documentation. Il est parfois nécessaire d'avoir une vue d'ensemble pour pouvoir les comprendre complètement.

## Syntaxe générale

Une recherche est constituée :

- D'un type d'objet.

- D'un ensemble de propositions constituées :

  - D'un mot-clef décrivant le type de recherche à effectuer.

  - D'une proposition décrivant les critères de cette recherche.

  - Éventuellement d'une sous-requête imbriquée.

Chaque proposition filtre le résultat de la proposition précédente (autrement dit, elles sont reliées par un ET logique).

Si le type d'objet n'est pas suivi d'un mot-clef décrivant un type de recherche précis, une recherche simplifiée est lancée.

### Types d'objets

Les types d'objets correspondent au contenu de la base de données : ouvrage, intervention, opérateur, etc.

Seuls les administrateurs peuvent effectuer des recherches sur les tâches planifiées, les utilisateurs et les groupes.

Il est possible d'utiliser `objet` comme type d'objet pour effectuer une recherche sur l'ensemble des objets de la base de données.

L'héritage entre types d'objets est pris en compte. Par exemple, si les types d'objets regard, tronçon, et branchement héritent tous les trois du type d'objet ouvrage, alors une recherche portants sur des ouvrages retournera les regards, les tronçons et les branchements.

### Types de recherches

Les mot-clefs qui déterminent le type de recherche à effectuer sont les suivants :

Mot-clef | Description
--- | ---
`parmi` | Recherche les objets dont les identifiants font partie d'une liste explicite.
`dont` | Effectue une recherche en fonction de la valeur d'un ou plusieurs champs.
`avec` | Recherche les objets liés à d'autres objets.
`sans` | Recherche les objets qui ne sont pas liés à d'autres objets.
`situé dans` | Recherche les objets situés à l'intérieur d'une ou plusieurs zones géographiques.
`situé à` | Recherche les objets situés à proximité d'autres objets.
`avec tag` | Recherche les objets possédant des étiquettes de classification.
`sans tag` | Recherche les objets ne possédant pas d'étiquettes de classification.

### Tolérance sur la syntaxe

La syntaxe d'une recherche est insensible :

- À la différence entre majuscules et minuscules.

- Aux accents.

- Au genre.

- Au nombre.

- Aux articles définis ou indéfinis : `le`, `la`, `les`, `un`, `des`, `au`, `de`, `du`, etc.

Cela signifie par exemple que les types d'objets peuvent être écrits indifféremment au singulier ou au pluriel.

Cela signifie aussi que vous pouvez librement accorder les mots-clefs, les articles, etc.

Exemple

Les deux recherches suivantes sont équivalentes :

    opérateurs dont l'état est connecté

    operateur dont etat est connecte

Par contre les noms de champs sont sensibles au nombre.

Exemple

Les deux recherches suivantes sont différentes :

    opérateurs dont les interventions sont renseignées

    opérateurs dont l'intervention est renseignée

### Tolérance sur les valeurs

Les valeurs des champs sont sensibles à la casse et aux accents, sauf lorsqu'on utilise le mot-clef `est` ou `n'est pas`. Dans ce cas, la comparaison est insensible à la casse et aux accents.

Exemple

Les recherches suivantes sont identiques :

    type d'ouvrage dont nom est fosse
    type d'ouvrage dont nom est fossé
    type d'ouvrage dont nom est Fosse
    type d'ouvrage dont nom est FOSSÉ

Les recherches suivantes sont différentes :

    type d'ouvrage dont nom est égal à fosse
    type d'ouvrage dont nom est égal à fossé
    type d'ouvrage dont nom est égal à Fosse
    type d'ouvrage dont nom est égal à FOSSÉ

### Utiliser un mot-clef comme valeur

Pour empêcher Omogen d'interpréter un élément comme mot-clef, ou bien pour rechercher un élément contenant des espaces, il est nécessaire d'entourer l'élément avec des guillemets.

Si l'élément dont contenir lui-même un guillemet, il faut alors le doubler.

Exemple

    client dont le nom est "EST ENSEMBLE"

    opérateur dont le nom est "John ""The Ripper"""

Les guillemets délimitent les valeurs recherchées.

Autrement dit, si vous n'utilisez pas de guillemets, Omogen considérera que la valeur recherchée est constituée par l'ensemble des mots suivant l'opérateur, jusqu'au mot-clef suivant.

Ainsi :

    opérateur dont le nom est "John The Ripper"

et

    opérateur dont le nom est John The Ripper

sont équivalents.

Par contre :

    opérateur dont le nom est "John The" Ripper

ne fonctionnera pas. L'élément recherché sera `John The`. `Ripper` sera ignoré et provoquera une erreur de syntaxe.

## Recherche simplifiée

### Recherche d'un objet dont on connaît l'identifiant

On peut accéder à un objet rapidement dès l'instant où l'on connaît son identifiant, en utilisant la syntaxe suivante :

    <type d'objet> <identifiant>

Exemple

    intervention I.000037

Retourne l'intervention `I.000037` immédiatement.

Il est possible de demander plusieurs objets en séparant leur identifiant par une virgule :

    <type d'objet> <identifiant 1>,<identifiant 2>,...,<identifiant n>

Exemple

    intervention I.000001,I.000002,I.000037,I.000004

Retourne les interventions I.000001, I.000002, I.000037 et I.000004 immédiatement.

Il est possible d'utiliser le mot-clef `parmi` pour effectuer le même genre de recherche (voir plus loin).

Dans le cas d'une recherche portant sur les utilisateurs, le mot-clef `MOI` correspond à l'identifiant de l'utilisateur courant.

### Recherche d'objet par mots-clefs

Cette recherche suit la syntaxe suivante:

    <type d'objet> <mot 1> <mot 2> ... <mot n>

Elle consiste à rechercher tous les objets du type spécifié dont la description contient un des mots spécifié après le type d'objet.

La description d'un objet est ce que vous voyez apparaître dans les tableaux.

Exemple

Si on effectue ainsi la recherche suivante :

    intervention robinetterie

Les interventions suivantes seront retournées :

    I.000006 I.000013 I.000018 I.000018 I.000024 I.000035

Il s'agira de chaque intervention contenant le mot `robinetterie` n'importe où dans la ligne de tableau la décrivant.

### Recherche d'objets parmi une liste d'identifiants avec `parmi`

Le mot-clef `parmi` permet de rechercher les objets à partir d'une liste d'identifiants. La syntaxe est la suivante :

    <type d'objet> parmi <identifiant 1>,<identifiant 2>,...,<identifiant n>

Exemple

    interventions parmi I.000001,I.000002,I.000037,I.000004

Retourne les interventions I.000001, I.000002, I.000037 et I.000004 immédiatement.

Si la liste d'identifiants est le mot-clef `quelconque`, la totalité des objets du type spécifié est retourné.

Si la liste d'identifiants est le mot-clef `rien`, aucun objet n'est retourné.

Les deux dernières syntaxes sont surtout utiles lorsqu'on construit des recherches au sein des fichiers de descriptions de classe d'Omogen.

## Recherche en fonction de la valeur d'un champ

Le mot-clef `dont` introduit une recherche en fonction de la valeur d'un ou plusieurs champs.

La syntaxe est la suivante :

    <type d'objet> dont <nom de champ> <critère de comparaison> [ et <nom de champ> <critère de comparaison> ... ]

Exemple

    interventions dont l'état est en cours

Retourne l'ensemble des interventions dont le champ "état" vaut "En cours".

Le mot-clef `et` permet de cumuler plusieurs critères :

    <type d'objet> dont <nom de champ> <critère de comparaison> [ et <nom de champ> <critère de comparaison> ... ]

Exemple

    interventions dont l'état est en cours et la date planifiée est le 6/9/2011

Retourne l'ensemble des interventions dont l'état est "En cours" et dont la date planifiée est le 6 septembre 2011.

### Champs

Une comparaison peut porter sur n'importe quel champ défini dans la fiche de l'objet. Le nom du champ est celui utilisé à l'affichage.

La comparaison peut en outre porter sur les champs spéciaux suivants:

- `date de modification` : la date à laquelle l'objet a été modifié pour la dernière fois.

- `date de création` : la date à laquelle l'objet a été créé.

- `créateur` : l'utilisateur ayant créé l'objet.

- `modificateur` : l'utilisateur ayant modifié l'objet en dernier.

Exemple

    ouvrages dont la date de modification est hier

Retourne la liste des ouvrages modifiés hier uniquement, et pas aujourd'hui.

### Critères de comparaisons généraux

Les critères de comparaison généraux peuvent porter sur n'importe quel champ. Ils sont décrits dans le tableau suivant :

Critère | Syntaxe | Signification | Exemple
--- | --- | --- | ---
`est` `sont` |
    est <valeur> [ ou <valeur> ... ]
| Teste si un champ est égal à la valeur spécifiée, ou bien à l'une des valeurs spécifiée si le mot-clef `ou` est utilisé. Attention : la comparaison est insensible à la casse et aux accents ! |
    interventions dont l'état est en cours ou en attente
`n'est pas` `ne sont pas` `n'est ni` `ne sont ni` |
    n'est pas <valeur> [ ou <valeur> ... ]
| Teste si un champ est différent de la valeur spécifiée, ou bien n'est aucune des valeurs spécifiées si le mot-clef `ou` est utilisé. Attention : la comparaison est insensible à la casse et aux accents ! |
    interventions dont l'état n'est pas clôturée
`contient` |
    contient <valeur> [ ou <valeur> ... ]
| Teste si un champ contient la valeur spécifiée, ou bien une des valeurs spécifiée si le mot-clef `ou` est utilisé. Attention : la comparaison est insensible à la casse et aux accents ! |
    ouvrages dont l'adresse contient "de gaulle"
`ne contient pas` |
    ne contient pas <valeur> [ ou <valeur> ... ]
| Teste si un champ ne contient pas la valeur spécifiée, ou bien aucune des valeurs spécifiées si le mot-clef `ou` est utilisé. Attention : la comparaison est insensible à la casse et aux accents ! |
    ouvrages dont l'adresse ne contient pas "général de gaulle" ou "gal de gaulle"
`commence par` |
    commence par <valeur> [ ou <valeur> ... ]
| Teste si un champ commence par la valeur spécifiée, ou bien par une des valeurs spécifiées si le mot-clef `ou` est utilisé. Attention : la comparaison est insensible à la casse et aux accents ! |
    ouvrages dont l'adresse commence par avenue
`ne commence pas par` |
    ne commence pas par <valeur> [ ou <valeur> ... ]
| Teste si un champ ne commence pas par la valeur spécifiée, ou bien par aucune des valeurs spécifiées si le mot-clef `ou` est utilisé. Attention : la comparaison est insensible à la casse et aux accents ! |
    ouvrages dont l'adresse ne commence par impasse
`est renseigné` `n'est pas vide` |
    est renseigné
| Teste si un champ est renseigné. |
    interventions dont la description est renseignée
`n'est pas renseigné` `est vide` |
    n'est pas renseigné
    est vide
| Teste si un champ n'est pas renseigné. |
    ouvrages dont l'adresse n'est pas renseignée
`existe` |
    existe
| Teste si un champ pointe sur un objet existant. |
    interventions dont le client existe
`n'existe pas` `est inexistant` |
    n'existe pas
| Teste si un champ pointe sur un objet inexistant. |
    interventions dont le client n'existe pas

### Critères de comparaison textuels

Les critères de comparaison textuels portent sur les champs uniquement textuels. Ils sont décrits dans le tableau suivant :

`ressemble à` |
    ressemble à <texte>
| Teste si un champ est phonétiquement équivalent à la valeur spécifiée. |
    ouvrage dont adresse ressemble à "général de gaulle"
`ne ressemble pas à` |
    ne ressemble pas à <texte>
| Teste si un champ n'est pas phonétiquement équivalent à la valeur spécifiée. |
    ouvrage dont adresse ne ressemble pas à "général de gaulle"

Le test de ressemblance phonétique ne fonctionne que sur des champs explicitement paramétrés comme tels dans l'application.

### Critères de comparaison numériques

Les critères de comparaison numériques portent sur les champs contenant des valeurs numériques ou bien des dates. Ils sont décrits dans le tableau suivant :

Critère | Syntaxe | Signification | Exemple
--- | --- | --- | ---
`est égal(e) à` `sont égaux(égales) à` |
    est égal(e) à <valeur>
| Teste si un champ numérique ou une date est égal à la valeur spécifiée. |
    interventions dont la date planifiée est le 06/09/2011
`est différent(e) de` `sont différent(e)s de` |
    est différent de <valeur>
| Teste si un champ numérique ou une date est différente de la valeur spécifiée. |
    dossiers dont le nombre d'appels est différent de 2
`est supérieur(e) à` `sont supérieur(e)s à` |
    est supérieur à <valeur>
| Teste si un champ numérique ou une date est supérieur à la valeur spécifiée. |
    dossiers dont le nombre d'appels est supérieur à 1
`est supérieur(e) ou égal(e) à` `sont supérieur(e)s ou égaux(égales) à` |
    est supérieur à <valeur>
| Teste si un champ numérique ou une date est supérieur ou égal à la valeur spécifiée. |
    dossiers dont le nombre d'appels est supérieur ou égal à 2
`est inférieur(e) à` `sont inférieur(e)s à` |
    est inférieur à <valeur>
| Teste si un champ numérique ou une date est inférieur à la valeur spécifiée. |
    interventions dont la date planifiée est inférieure au 06/09/2011
`est inférieur(e) ou égal(e) à` `sont inférieur(e)s ou égaux(égales) à` |
    est inférieur ou égal à <valeur>
| Teste si un champ numérique ou une date est inférieur ou égal à la valeur spécifiée. |
    interventions dont la date planifiée est inférieure ou égale au 05/09/2011
`est compris entre` |
    est compris entre <valeur minimale> et <valeur maximale>
| Teste si un champ numérique ou une date est compris entre les valeur spécifiées, bornes incluses. |
    interventions dont la date planifiée est comprise entre le 01/01/2010 et le 31/12/2010
`est quelconque` |
    est quelconque
| Permet de rédiger une condition toujours vraie. Le mot-clef `quelconque` peut être ainsi utilisé comme valeur par défaut dans un critère de recherche présenté à l'utilisateur sous forme de liste. |
    interventions dont le client est quelconque

Vous pouvez utiliser les critères `est égal à` et `est différent de` avec des champs de type chaîne de caractères. Dans ce cas la comparaison est sensible à la casse et aux accents.

### Syntaxe des valeurs numériques

Les nombres peuvent être saisis :

- Sous forme numérique, avec une virgule ou un point comme séparateur décimal.

- En français, s'ils sont compris entre zéro et vingt.

Exemple

    dossiers dont le nombre d'appels est supérieur à cinq
    regards dont la profondeur est supérieure ou égale à 3,5

### Syntaxe des dates

Les dates doivent être saisies au format français : `<jour>/<mois>/<année>`.

Par exemple: `01/01/2010`, `06/09/2011`...

Il est possible d'utiliser les mots-clefs suivants qui représentent des périodes.

Dans ce cas, la recherche ne portera pas sur une date exacte, mais sur la plage temporelle associée au mot-clef, comme pour une recherche « `est compris entre` ... `et` ... ».

Mot-clef | Période correspondante
--- | ---
`le mois de XXXX` | Du premier jour du mois spécifié à son dernier jour.
`l'année XXXX` | Du 1er janvier de l'année spécifiée au 31 décembre de cette même année.

Les mots-clefs suivants représentent des dates relatives :

Mot-clef | Période correspondante
--- | ---
`aujourd'hui` | De 00h00 à l'heure courante.
`maintenant` | De l'heure courante jusqu'au lendemain même heure.
`hier` | Hier, de 00h00 à minuit.
`avant-hier` | Avant-hier, de 00h00 à minuit.
`demain` | Demain, de 00h00 à minuit.

Exemple

    interventions dont la date planifiée est demain

Les mots-clefs suivant représentent des intervalles de dates relatifs:

Mot-clef | Période correspondante
--- | ---
`cette semaine` | Du lundi de la semaine en cours 00h00 jusqu'au dimanche soir minuit.
`la semaine dernière` `la semaine précédente` | Du lundi de la semaine dernière 00h00 jusqu'au dimanche soir minuit.
`la semaine prochaine` `la semaine suivante` | Du lundi de la semaine prochaine 00h00 jusqu'au dimanche soir minuit.
`ce mois` `ce mois-ci` | Du premier jour du mois en cours 00h00 jusqu'au dernier jour du mois minuit.
`le mois dernier` `le moins précédent` | Du premier jour du mois dernier 00h00 jusqu'au dernier jour minuit.
`le mois prochain` `le mois suivant` | Du premier jour du mois prochain 00h00 jusqu'au dernier jour minuit.
`ce trimestre` | Du premier jour du trimestre en cours 00h00 jusqu'au dernier jour du trimestre minuit.
`le trimestre dernier` `le trimestre précédent` | Du premier jour du trimestre dernier 00h00 jusqu'au dernier jour de ce trimestre minuit.
`le trimestre prochain` `le trimestre suivant` | Du premier jour du trimestre suivant 00h00 jusqu'au dernier jour de ce trimestre minuit.
`cette année` | Du 1er janvier de cette année 00h00 jusqu'au 31 décembre minuit.
`l'année dernière` `l'année précédente` | Du 1er janvier de l'année dernière 00h00 jusqu'au 31 décembre minuit.
`l'année prochaine` `l'année suivante` | Du 1er janvier de l'année prochaine 00h00 jusqu'au 31 décembre minuit.

Exemple

    évènements dont la date est ce mois

Il est possible aussi d'utiliser les syntaxes suivantes :

Mot-clef | Période correspondante
--- | ---
`il y a <valeur> <période>` | Période spécifiée dans le passé par rapport à maintenant.
`dans <valeur> <période>` | Période spécifiée dans le futur par rapport à maintenant.

Les différentes périodes possibles sont : `minute(s)`, `heure(s)`, `jour(s)`, `semaine(s)`, `mois(s)`, `an(s)` ou `années(s)`.

Pour les périodes `minute` et `heure`, le période commencera (ou terminera) à la date et heure courante. Pour les autres périodes, elle commencera (ou terminera) aujourd'hui à 00h00.

Exemple

    évènements dont la date est il y a 6 mois
    évènements dont la date est dans une semaine

## Recherche d'objets liés

### Le mot-clef `avec`

Le mot-clef `avec` introduit une recherche d'objets liés avec d'autres objets.

Elle permet de rechercher un ensemble d'objets à l'aide une requête normale, puis retourne les objets qui lui sont reliés par l'intermédiaire d'un champ donné.

Par exemple, les interventions associées aux opérateurs dont le métier est la plomberie.

La syntaxe est la suivante :

    <type d'objet> avec <nom du champ contenant le lien> <sous-requête>

ATTENTION ! ce qui suit le mot-clef `avec` n'est pas un type d'objet, mais le nom du champ contenant les liens. Il est donc sensible au genre et au nombre (mais pas aux accents ni à la casse). Heureusement, dans la plupart des cas, le nom de champ est le nom du type d'objet lié au pluriel.

La sous-requête peut être de n'importe quel type : requête portant sur un champ introduite par le mot-clef `dont`, une autre requête d'objets liés introduite par le mot-clef `avec`, etc.

Exemple

    interventions avec opérateur dont le prénom est Jean-Claude et le nom est Dusse

Cette requête recherche toutes les interventions affectées à l'opérateur Jean-Claude Dusse. Notez que `opérateur` est obligatoirement au singulier, car il s'agit d'un nom de champ.

    ordre travail avec interventions dont l'état est annulée

Cette recherche retourne toutes les interventions ayant au moins une intervention annulée.

    campagnes avec objets RU.123

Cette recherche retourne les campagnes qui ont eu lieu sur l'ouvrage d'identifiant `RU.123`.

    intervention avec ordre de travail

Cette recherche retourne les interventions qui ne sont pas orphelines (c'est-à-dire rattachées à un ordre de travail).

### Le mot-clef `avec éventuellement`

Il s'agit d'une recherche ayant la même syntaxe et retournant le même résultat qu'une recherche « `avec` », à ceci prêt que la recherche retourne en plus les objets n'ayant aucune association.

Exemple

    opérateur dont agence est AG.ASAP avec éventuellement activités ACT.INF

Cette recherche retourne les opérateur de l'agence `AG.ASAP` associés à l'activité `ACT.INF`, ainsi que les opérateurss de l'agence `AG.ASAP` qui ne sont associés à aucune activité.

### Le mot-clef `sans`

Le mot-clef `sans` permet de rechercher les objets n'ayant aucune association avec d'autres objets.

Cette recherche utilise exactement la même syntaxe que celle introduite par le mot-clef `avec`.

Exemple

    interventions sans ordre de travail

Cette recherche retourne les intervention orphelines (sans ordre de travail).

    ordre de travail sans interventions

Cette recherche retourne les ordres de travail n'ayant encore aucune intervention.

    ordre de travail sans interventions dont état est non réalisable.

Cette recherche retourne les ordres de travail n'ayant aucune intervention non réalisable.

### Recherches imbriquées

Les mots-clefs `avec` et `sans` introduise une recherche imbriquée.

Une question se pose alors si cette recherche imbriquée est suivie d'une autre partie de la recherche introduite par un nouveau mot-clef : cette partie de la recherche porte-t-elle sur la recherche imbriquée ou bien sur la recherche globale ?

Par défaut, tout ce qui suit une recherche imbriquée porte sur cette recherche imbriquée et pas sur la recherche globale.

Exemple

    client avec agences avec activités dont gestion des ressources est "Oui"

retourne les clients associés aux agences associées aux activités dont la gestion des ressources est activée.

Si l'on veut que ce qui suive la recherche imbriquée porte sur la recherche précédente, il faut entourer la recherche imbriquée avec des crochets, de la manière suivante :

Exemple

    client avec agences avec activités [ dont gestion des ressources est "Oui" ] dont service d'astreinte est "Oui"

retourne les clients qui sont associés aux agences avec un service d'astreinte, qui sont associées aux activités dont la gestion des ressources est activée.

Si on n'avait pas mis les crochets, la partie `dont service d'astreinte est "Oui"` aurait porté sur les activités des agences.

On peut imbriquer les crochets :

Exemple

    client avec agences [ avec activités [ dont gestion des ressources est "Oui" ] dont service d'astreinte est "Oui" ] dont la société mère est "VEOLIA"

retourne les clients dont la société mère est Veolia, et qui sont associés aux agences avec un service d'astreinte associées aux activités dont la gestion des ressources est activée.

Si on n'avait pas mis les crochets, la partie `dont la société mère est "VEOLIA"` aurait porté soit sur les activités des agences, soit sur les agences (en fonction de quels crochets on supprime).

## Recherche géographique

Les recherches géographiques permettent de retrouver les objets :

- situés dans une zone donnée.

- situés à proximité d'un ou plusieurs d'objets données.

### Recherche au sein d'une zone

Le mot-clef `situé dans` introduit la recherche au sein d'une zone.

La syntaxe est la suivante :

    <type d'objet> situé dans <sous-requête>

La sous-requête peut être n'importe quelle type de recherche. Elle doit retourner un ou plusieurs objets de type "secteur".

La requête principale retournera alors l'ensemble des objets situés dans l'ensemble des objets de type "secteur" retourné par la sous-requête.

### Recherche de proximité

Le mot-clef `situé à` introduit une recherche de proximité.

La syntaxe est la suivante :

    <type d'objet> situé à <distance> de <sous-requête>

La sous-requête peut être n'importe quelle type de recherche.

La requête principale retournera l'ensemble des objets situés autour des objets retournés par la sous-requête, à une distance inférieure ou égale à la distance spécifiée.

La distance est constitué d'une valeur numérique suivie d'une unité : `m` ou `km`.

## Recherches sur les étiquettes

Les mots-clefs `avec tag` et `sans tag` permettent d'effectuer des recherches d'objet associés à des étiquettes de classification.

La syntaxe est la suivante :

    <type d'objet> avec tag <étiquette n°1> [ ou <étiquette n°2> ... ]
    <type d'objet> sans tag <étiquette n°1> [ ou <étiquette n°2> ... ]

`avec tag` recherche les objets qui possèdent les étiquettes spécifiées. `sans tag` les objets ne possédant pas les étiquettes spécifiées.

Les étiquettes sont indiquées en utilisant le format interne d'Omogen :

    <Parent> | <Groupe> : <Nom de l'étiquette>

Exemple

    intervention avec tag "Couleur:Bleu" ou "Couleur:Rouge"
    intervention avec tag "Accident animal|Type d'animal:Grand gibier"

## Recherches spéciales

### Recherche sans critère

Le mot-clef `quelconque` peut être utilisé pour faire une recherche de tous les objets d'une classe.

Exemple

    ordre de travail quelconque

Retournera tous les ordres de travail de la base.

C'est équivalent à utiliser

    ordre de travail

seul comme recherche.

### Recherche générique

La recherche générique permet d'effectuer une recherche textuelle sur l'ensemble de la base de données.

Elle est déclenchée dès lors que le texte complet de la recherche est écrit entre guillements :

    "<recherche textuelle>"

Le texte contenu entre guillemets est alors recherché dans la base de données. Les objets dont la fiche contient au moins une occurence de ce texte sont retournés.

Il est possible d'utiliser le caractère spécial `*` dans le texte recherché. Il signifie alors "n'importe quel texte".

La recherche est insensible à la casse.

Attention : ce type de recherche peut-être très lent, car il est toujours proportionnel à la taille de la base de données.

Donc évitez autant que possible ce type de recherche !

### Raccourcis de recherche

Certains mots-clefs servent de raccourci à certaines recherches.

Mot-clef | Exemple | Signification | Correspond à la recherche
--- | --- | --- | ---
`actif` / `active` | `<type d'objet> actif` | Recherche d'objets actifs | `<type d'objet> dont activé n'est pas Non`
`inactif` / `inactive` | `<type d'objet> inactif` | Recherche d'objets désactivés | `<type d'objet> dont activé est Non`

## Présentation du résultat

Le résultat d'une recherche est, par défaut, trié dans l'ordre croissant des identifiants internes.

Le tri est dit "naturel". C'est-à-dire qu'il est insensible à la casse, et qu'en outre les éventuels nombres présents à l'intérieur de l'identifiant sont triés par ordre numérique et non alphabétique.

Exemple

`INT.8, INT.9, INT.10, INT.11`

et non `INT.10, INT.11, INT.8, INT.9` qui serait un tri alphabétique classique.

### Tri par ordre décroissant

Par défaut, le tri est toujours par ordre croissant.

Il est possible d'inverser l'ordre du résultat et d'obtenir un tri par ordre décroissant en ajoutant `(en ordre inverse)` ou `(par ordre inverse)` à la fin de la recherche.

### Tri par rapport à un champ donné

Il est possible de trier le résultat de la recherche en fonction de la valeur d'un champ donné.

Pour cela, il faut rajouter à la fin de la recherche `(par <champ>)` ou `<champ>` est le nom du champ de tri.

Il est possible en outre de spécifier si le tri est croissant ou décroissant en ajoutant le terme `croissant` ou `décroissant` après le nom du champ et avant la parenthèse fermante.

Par défaut, le tri est par ordre croissant.