Cette rubrique décrit la syntaxe et l'utilisation de la clause query pour la récupération d'index.
Présentation
La clause query est obligatoire pour toute requête de recherche. Elle spécifie les éléments à rechercher dans un champ d'index donné et définit la relation entre plusieurs conditions de recherche à l'aide d'opérateurs logiques tels que AND, OR, ANDNOT et RANK.
Par exemple, vous pouvez combiner deux champs de type TEXT, tels que title et subject, en un seul index composite nommé default. Une recherche sur l'index default renvoie alors les documents dont le contenu correspond à la requête de recherche dans les champs source title ou subject.
Si vous créez un index nommé title_search basé uniquement sur le champ title, une requête adressée à title_search renvoie uniquement les documents dont le contenu du champ title correspond à la requête de recherche.
Syntaxe
Les conditions de recherche utilisent les formats suivants :
Requête standard : index:'search query'^boost
recherche par plage : index:'circle(longitude latitude,radius)'
recherche par plage : index:[value1,value2]
index : nom du champ d'index à rechercher, tel qu'il est défini dans votre schéma d'index. La recherche identifie les documents où la requête apparaît dans l'un des champs source constituant ce champ d'index.
search query : contenu que vous souhaitez rechercher.
boost : facteur de pertinence à appliquer à la requête de recherche. La valeur doit être un entier compris entre 0 et 99. Si elle n'est pas spécifiée, la valeur par défaut est 99. Ce paramètre est facultatif et ne prend effet que si la fonction
exact_match_boost()est configurée dans l'expression de tri approximatif.Combinez plusieurs conditions de recherche à l'aide des opérateurs logiques suivants : (), AND, OR, ANDNOT et RANK. Ces opérateurs doivent être écrits en majuscules. Les opérateurs sont évalués selon l'ordre de priorité suivant, du plus faible au plus élevé : RANK<OR<AND<ANDNOT<().
Pour effectuer une recherche par expression exacte, placez la requête de recherche entre guillemets doubles (
""). Cette recherche identifie les documents où les termes analysés apparaissent dans le même ordre et à la même position que dans l'expression d'origine.Une recherche par plage prend en charge les requêtes sur les emplacements géographiques et les plages numériques. Pour plus d'informations, consultez la section recherche par plage.
Notes d'utilisation
**La clause
queryest obligatoire et ne peut pas être vide.****L'opérateur
ANDNOTne peut pas être utilisé seul. La condition de recherche située à gauche deANDNOTne doit pas être vide, par exempleindex_name:''.**Si l'opérateur
RANKne se trouve pas à la fin de la requête, comme dansindex1:'xxx' RANK index2:'xxx' AND index3:'xxx', regroupez l'opérationRANKentre parenthèses, par exemple :(index1:'xxx' RANK index2:'xxx') AND index3:'xxx'. Sinon, toutes les conditions suivantes sont incluses dans l'opérationRANK, et la requête est interprétée commeindex1:'xxx' RANK (index2:'xxx' AND index3:'xxx').**Placez la requête de recherche entre guillemets simples (
' ') ou doubles (" "). À défaut, la requête risque d'échouer, de ne renvoyer aucun résultat ou de produire un comportement inattendu.**Seuls les champs
TEXTouSHORT_TEXTpeuvent être utilisés pour créer un index composite.Si la valeur
boostest inférieure à 0, elle est traitée comme 0. Si elle est supérieure à 99, elle est traitée comme 99.Pour plus d'informations sur le traitement des différents types de recherche, consultez la section analyseur intégré.
Exemples
-
Recherchez les documents dont le champ d'index
titlecontient « Peking University » :query=title:'Peking University' -
Recherchez les documents dont le champ d'index
titlecontient à la fois « Peking University » et « Zhejiang University » :query=title:'Peking University' AND title:'Zhejiang University' -
Recherchez les documents dont le champ d'index
titlecontient « Peking University » ou « Zhejiang University », et dont le champtypeest « 1 » :query=(title:'Peking University' OR title:'Zhejiang University') AND type:'1' -
Recherchez les documents dont le champ d'index
titlecontient « Peking University » ou « Zhejiang University ». **Cet exemple illustre une autre syntaxe pourOR** :query=title:'Peking University'|'Zhejiang University' -
Recherchez les documents dont le champ d'index
titlecontient Peking University mais pas Tsinghua. Si le champtitlecontient également President, ces documents sont classés plus haut :query=(title:'Peking University' ANDNOT title:'Tsinghua') RANK title:'President' // The fine sort expression is: text_relevance(title) -
Recherchez les documents dont le champ d'index
titlecontient l'expression exacte Peking University. Cela évite de faire correspondre des documents contenant des termes similaires mais distincts, tels que « University of Beijing » :query=title:"Peking University" -
Effectuez une recherche dans un champ de type
INT_ARRAY:// Assume you have an INT_ARRAY field indexed as arr_index_1. // This query retrieves any document where the array contains the value 1. query=arr_index_1:'1' -
Effectuez une recherche dans un champ de type
LITERAL_ARRAY: unLITERAL_ARRAYest un tableau de constantes de chaîne où chaque élément n'est pas tokenisé et ne prend en charge que la correspondance exacte. Supposons que vous disposiez d'un champLITERAL_ARRAYindexé sous le nomtags_index:// The document is retrieved if any element in the array is an exact match for 'Red'. // Note: Because LITERAL_ARRAY performs an exact match, the search query must be identical to an array element. For example, if an element is 'Peking University', a search for 'Peking' does not return a match. query=tags_index:'Red' // Search for documents where the array contains either 'Red' or 'Blue'. query=tags_index:'Red' OR tags_index:'Blue'