Les clauses de requête définissent les critères de recherche, les champs d'index à interroger et la manière de combiner plusieurs conditions à l'aide d'opérateurs tels que AND, OR, ANDNOT et RANK.
Description des clauses
Une clause de requête spécifie ce qu'il faut rechercher dans un champ d'index. Vous pouvez définir plusieurs conditions et les combiner avec des opérateurs tels que AND, OR, ANDNOT et RANK.
Par exemple, vous pouvez combiner deux champs TEXT, tels que title et subject, pour créer un index commun nommé default. Une requête sur l'index default renvoie alors les documents dont le texte correspond à la requête de recherche dans le champ title ou subject.
Si vous créez un index distinct nommé title_search pour le champ title, une requête sur cet index ne renvoie un document que si la requête de recherche correspond au texte contenu dans le champ title.
Syntaxe
Requêtes simples
Syntaxe :
query=index_name:'search_query'^boost search_condition index_name:'search_query'^boost
index_name : l'index configuré dans le schéma d'index. La recherche est effectuée sur les champs source de cet index afin de trouver les documents contenant la requête de recherche.
search_query : le contenu à rechercher.
boost : le poids de la requête de recherche. La valeur doit être un entier compris entre 0 et 99. Si vous ne spécifiez pas ce paramètre, la valeur par défaut est 99.
search_condition : une ou plusieurs conditions de recherche. Les opérateurs pris en charge, classés par ordre de priorité croissante, sont
RANK,OR,AND,ANDNOTet(). Les opérateurs doivent être écrits en majuscules.AND : trouve les documents qui correspondent aux deux requêtes de recherche. Par exemple,
query=default:'mobile phone' AND default:'bluetooth'renvoie les documents contenant à la fois « mobile phone » et « bluetooth ».OR : trouve les documents qui correspondent à au moins l'une des requêtes de recherche. Par exemple,
query=default:'mobile phone' OR default:'bluetooth'renvoie les documents contenant « mobile phone » ou « bluetooth ».ANDNOT : trouve les documents qui correspondent à la première requête de recherche mais pas à la seconde. Par exemple,
query=default:'mobile phone' ANDNOT default:'bluetooth'renvoie les documents contenant « mobile phone » mais pas « bluetooth ».RANK : trouve les documents qui correspondent à la première requête de recherche, indépendamment de leur correspondance avec la seconde. Par exemple,
query=default:'mobile phone' RANK default:'bluetooth'renvoie les documents contenant « mobile phone », sans exiger qu'ils contiennent « bluetooth ». Utilisez cet opérateur lorsqu'une requête doit influencer le score sans affecter la récupération des résultats. Combiné aux calculs de pertinence textuelle, il permet de classer plus haut les documents contenant « bluetooth ».
Requêtes avancées
Utiliser un nom d'index pour plusieurs requêtes de recherche
Syntaxe :
query=index_name:'search_query'^boost | 'search_query'^boost
query=index_name:'search_query'^boost & 'search_query'^boost
La barre verticale (|) spécifie l'opérateur OR. L'esperluette (&) spécifie l'opérateur AND.
Requêtes de phrase
Syntaxe :
query=index_name:"search_term"^boost OPERATOR index_name:"search_term"^boost
L'encadrement d'une requête de recherche entre guillemets doubles ("") crée une requête de phrase, qui exige que les termes tokenisés soient adjacents et dans le même ordre.
Pour effectuer une requête de phrase, encadrez la requête de recherche entre guillemets doubles (
""). Une requête de phrase correspond aux termes contigus et dans le même ordre après tokenisation.Les requêtes de plage incluent les requêtes sur les données géographiques et numériques.
Requêtes weakand
Syntaxe :
query=index_name:('search_query'||'search_query')^number
query=index_name:('search_query')^^number
Une requête weakand renvoie les documents qui ne correspondent qu'à une partie d'une longue requête de recherche. Vous pouvez spécifier le nombre minimal de termes devant correspondre de deux manières. Si vous tokenisez la requête avant de l'envoyer, utilisez l'opérateur ^ pour indiquer le nombre minimal exact de termes correspondants. Si le moteur DPI tokenise la requête et que vous ne connaissez pas à l'avance le nombre de termes, utilisez l'opérateur ^^ pour définir un ratio minimal de correspondance. Le paramètre number pour ^^ est une valeur en millièmes. Le nombre minimal de termes correspondants est calculé comme suit : (Nombre de termes après tokenisation × number / 1000.0), le résultat étant arrondi à l'entier supérieur.
Une requête weakand se situe entre une requête AND et une requête OR. Les performances s'améliorent à mesure que le nombre minimal de termes correspondants augmente.
Remarque : la fonctionnalité de requête weakand est désactivée par défaut. Pour utiliser cette fonctionnalité, contactez le support technique.
Requêtes géographiques
Syntaxe :
query=index_name:'SHAPE(ARGS...)'
SHAPE(ARGS...) peut être l'un des éléments suivants :
Point :
point(LON LAT).LONreprésente la longitude etLATla latitude. Séparez-les par un espace.Cercle :
circle(LON LAT,Radius).LONreprésente la longitude,LATla latitude etRadiusle rayon en mètres.Rectangle :
rectangle(minLON minLAT,maxLON maxLAT). Pour la latitude,maxYdoit être supérieur ou égal àminY. Si vous inversez l'ordre, les valeurs sont automatiquement ajustées. Pour la longitude, la plage allant deminXàmaxXest interprétée d'ouest en est. Si vous inversez l'ordre, la plage devient incorrecte.Polygone :
polygon(LON1 LAT1,LON2 LAT2,LON3 LAT3,LON4 LAT4,...). Le polygone peut être convexe ou concave. Les points de départ et d'arrivée doivent être identiques. Les arêtes contiguës ne peuvent pas être colinéaires. Les arêtes du polygone ne peuvent pas s'auto-intersecter.
Remarque :
L'index de la requête doit être de type spatial.
Encadrez la forme entre guillemets simples (
') pour les requêtes sur un index spatial. Par exemple :query=spatial_index:'circle(130.0 10.0,1000.0)'.Les coordonnées des lignes et des polygones sont projetées sur une carte plane du monde pour définir leur étendue. Le système ne prend pas en compte les formes qui traversent le méridien 180 degrés. Les résultats de requête pour les index
locationsont précis. Les résultats pour les indexlineetpolygonnécessitent un filtrage des lignes.
Requêtes de plage numérique
Syntaxe :
query=index_name:(value1,value2]
value1 et value2 représentent le début et la fin de la plage numérique. Les requêtes de plage prennent en charge les intervalles ouverts et fermés. Une parenthèse ( indique un intervalle ouvert, tandis qu'un crochet ] indique un intervalle fermé.
Exemples :
Intervalle ouvert : query = price:(3,100). Cette requête renvoie les données où 3 < x < 100.
Intervalle fermé : query = price:[3,100]. Cette requête renvoie les données où 3 <= x <= 100.
Intervalle semi-ouvert : query = price:(3,100]. Cette requête renvoie les données où 3 < x <= 100.
Valeur de début non spécifiée : query=price:(,100). Cette requête renvoie les données où x < 100.
Remarque :
L'index de la requête doit être de type plage numérique.
Les valeurs doivent être des entiers. Les nombres à virgule flottante ne sont pas pris en charge.
Requêtes de date
Syntaxe :
query=index_name:(start_time,end_time]
Les heures de début et de fin sont des horodatages UNIX entiers en millisecondes. Si vous ne spécifiez pas d'heure de début, la recherche commence à partir de 0. Si vous ne spécifiez pas d'heure de fin, la valeur par défaut est 4102416000000, ce qui correspond à 2100-01-01 00:00:00. Les requêtes de date prennent également en charge les intervalles ouverts et fermés.
Remarque :
L'index de la requête doit être de type date.
L'horodatage doit être un entier en millisecondes. Si une valeur dépasse 4102416000000, elle est traitée comme 4102416000000.