Este tema describe la sintaxis y el uso de la cláusula query para la recuperación por índice.
Descripción general
La cláusula query es obligatoria en cualquier solicitud de búsqueda. Esta cláusula especifica qué buscar en un campo de índice específico y define la relación entre varias condiciones de consulta mediante operadores lógicos como AND, OR, ANDNOT y RANK.
Por ejemplo, puede combinar dos campos de tipo TEXT, como title y subject, en un único índice compuesto llamado default. Una búsqueda en el índice default recupera los documentos donde la consulta coincide con el contenido del campo fuente title o subject.
De forma alternativa, si crea un índice llamado title_search basado únicamente en el campo title, una consulta sobre title_search devuelve solo los documentos donde la consulta coincide con el contenido del campo title.
Sintaxis
Las condiciones de consulta utilizan los siguientes formatos:
Consulta estándar: index:'search query'^boost
búsqueda por rango: index:'circle(longitude latitude,radius)'
búsqueda por rango: index:[value1,value2]
index: Nombre del campo de índice donde se realizará la búsqueda, según se define en su esquema de índice. La búsqueda encuentra documentos en los que la consulta aparece en cualquiera de los campos fuente que componen este campo de índice.
search query: Contenido que desea buscar.
boost: Valor de relevancia que se aplica a la consulta de búsqueda. El valor debe ser un número entero entre 0 y 99. Si no se especifica, el valor predeterminado es 99. Este parámetro es opcional y solo surte efecto si la función
exact_match_boost()está configurada en la expresión de ordenamiento preliminar.Puede combinar varias condiciones de consulta mediante los siguientes operadores lógicos:
(),AND,OR,ANDNOTyRANK. Estos operadores deben escribirse en mayúsculas. Los operadores se evalúan en el siguiente orden de precedencia, de menor a mayor:RANK<OR<AND<ANDNOT<().Para realizar una consulta de frase, encierre la consulta de búsqueda entre comillas dobles (
""). Una consulta de frase encuentra documentos donde los términos analizados aparecen en el mismo orden y posición que en la frase original.La búsqueda por rango admite consultas sobre ubicaciones geográficas y rangos numéricos. Para obtener más información, consulte búsqueda por rango.
Notas de uso
**La cláusula
queryes obligatoria y no puede estar vacía.****El operador
ANDNOTno puede utilizarse por sí solo. La condición de consulta a la izquierda deANDNOTno debe estar vacía, como enindex_name:''.**Si el operador
RANKno se encuentra al final de la consulta, como enindex1:'xxx' RANK index2:'xxx' AND index3:'xxx', debe agrupar la operaciónRANKcon paréntesis; por ejemplo:(index1:'xxx' RANK index2:'xxx') AND index3:'xxx'. De lo contrario, todas las condiciones posteriores se incluyen en la operaciónRANKy la consulta se interpreta comoindex1:'xxx' RANK (index2:'xxx' AND index3:'xxx').**Debe encerrar la consulta de búsqueda entre comillas simples (
' ') o dobles (" "). De lo contrario, la consulta podría fallar, no devolver resultados o producir un comportamiento inesperado.**Solo puede utilizar campos
TEXToSHORT_TEXTpara crear un índice compuesto.Si el valor de
boostes menor que 0, se trata como 0. Si es mayor que 99, se trata como 99.Para obtener más información sobre cómo se procesan los distintos tipos de búsqueda, consulte analizador integrado.
Ejemplos
-
Busque documentos donde el campo de índice
titlecontenga "Peking University":query=title:'Peking University' -
Busque documentos donde el campo de índice
titlecontenga tanto "Peking University" como "Zhejiang University":query=title:'Peking University' AND title:'Zhejiang University' -
Busque documentos donde el campo de índice
titlecontenga "Peking University" o "Zhejiang University", y el campotypesea "1":query=(title:'Peking University' OR title:'Zhejiang University') AND type:'1' -
Busque documentos donde el campo de índice
titlecontenga "Peking University" o "Zhejiang University". **Este ejemplo muestra una sintaxis alternativa paraOR**:query=title:'Peking University'|'Zhejiang University' -
Busque documentos donde el campo de índice
titlecontenga Peking University pero no Tsinghua. Si el campotitletambién contiene President, asigne una clasificación más alta a estos documentos:query=(title:'Peking University' ANDNOT title:'Tsinghua') RANK title:'President' // The fine sort expression is: text_relevance(title) -
Busque documentos donde el campo de índice
titlecontenga la frase exacta Peking University. Esto evita coincidir con documentos que tengan términos similares pero separados, como "University of Beijing":query=title:"Peking University" -
Realice una búsqueda en un campo de tipo
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' -
Realice una búsqueda en un campo de tipo
LITERAL_ARRAY: Un campoLITERAL_ARRAYes una matriz de constantes de cadena donde cada elemento no se tokeniza y solo admite coincidencias exactas. Suponga que tiene un campoLITERAL_ARRAYindexado comotags_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'