Limitation de la durée des recherches

Bien que l'algorithme de recherche de Texpress permet des recherches très rapides à travers de larges jeux de données, certaines classes de requêtes peuvent prendre plus de temps à être exécutées.

En particulier, les requêtes suivantes peuvent s'exécuter lentement :

Type de recherche

Explication

Recherche sans le support d'un index

Cette catégorie de recherches comprend l'interrogation de champs sans support d'index et les recherches par caractères génériques lorsqu'un terme d'index n'a pas été fourni. Par exemple, rechercher tous les noms de famille du module Personnes / Organisations qui commencent par A, c'est-à-dire une recherche sur A*, récupère tous les enregistrements et compare les données relatives au nom de famille correspondant à A*. Pour un grand ensemble de données, cela peut prendre du temps.

Recherches encadrées

Même si des index existent pour des recherches de plages, ils existent au niveau de la description de l'enregistrement. Une plage de recherche implique la visite de chaque description d'enregistrement et la vérification des données concernées (range bits) pour contrôler si elles tombent dans la plage recherchée.

Grand nombre de termes OU combinaison de termes avec le terme ET

Lorsqu'une requête OR est exécutée, le serveur effectue une requête logique par terme OR et fusionne les résultats dans un seul ensemble de correspondance. Comme la requête est très rapide, ce n'est pas un problème. Cependant si une requête contient un grand nombre de termes OU et des termes ET, le requêteur va d'abord optimiser la requête pour la transformer en une combinaison d'expressions de OU qui contiennent une liste de termes ET. Ainsi une requête comme :

select all from eparties where NamFirst contains 'Joe' AND (NamLast contains 'Doe' OR NamLast contains 'Smith')

est transformé par l'optimiser en :

select all from eparties where (NamFirst contains 'Joe' AND NamLast contains 'Doe') OR (NamFirst contains 'Joe' AND NamLast contains 'Smith')

Si un grand nombre de termes OU et de termes ET existe, l'optimiser risque de prendre un temps considérable pour retravailler la requête originale et la transformer en termes de recherches adéquats pour le moteur de recherche. Une fois l'optimisation terminée, chaque requête OU va très vite (en supposant qu'il existe un index de termes).

Comme certaines requêtes prenaient du temps sur les grands jeux de données, une fonction a été introduite avec Texpress 8.0.028, qui permet de fixer une limite au temps de recherche : il est possible d'interrompre la recherche après un nombre donné de secondes. Cette fonction permet aussi d'interdire des recherches qui entraîneraient la recherche d'un trop grand nombre de segments (traite les Recherches de plages et Recherches sans le support d'un index).

Le mécanisme de limitation du temps de recherche fonctionne sous texforms, TexQL et texserver. Des extensions ont été ajoutées en texxmlserver pour bénéficier de cette nouvelle facilité.

Les options Texpress pour contrôler l’expiration des recherches incluent :

Des extensions d’expiration sont également disponibles pour texxmlserver :