Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

queryString Operador

queryString

El operador queryString permite la consulta de una combinación de campos y valores indexados. Puedes realizar búsquedas de texto, comodines, expresiones regulares, difusas y de rango en los campos string utilizando el operador queryString.

queryString tiene la siguiente sintaxis:

1{
2 "$search": {
3 "index": <index name>, // optional, defaults to "default"
4 "queryString": {
5 "defaultPath": "<default-field-to-search>",
6 "query": "(<field-to-search>: (<search-values>) AND|OR (<search-values>)) AND|OR (<search-values>)"
7 }
8 }
9}

queryString utiliza los siguientes términos para construir una query:

Campo
Tipo
Descripción
Necesidad

defaultPath

string

El campo indexado para buscar por defecto. MongoDB Search solo busca en el campo en defaultPath si omites el campo para buscar en query.

Sí

query

string

Uno o más campos indexados y valores para buscar. Los campos y valores están delimitados por dos puntos. Por ejemplo, para buscar en el campo plot la string baseball, usa plot:baseball. Los siguientes operadores están disponibles para combinar varios criterios de búsqueda:

Puedes combinar los campos y valores usando lo siguiente:

  • AND: Indica AND operador booleano. Todos los valores de búsqueda deben estar presentes para que un documento se incluya en los resultados.

  • OR: Indica OR operador booleano. Al menos uno de los valores de búsqueda debe estar presente para que un documento se incluya en los resultados.

  • NOT: Indica NOT operador booleano. El valor de búsqueda especificado debe estar ausente para que un documento se incluya en los resultados.

  • TO: Indica el rango para buscar. Puede usar [] para un rango inclusivo, {} para un rango exclusivo, o {] y [} para un rango semiabierto. Cualquier valor que se encuentre dentro del rango especificado debe estar presente para que un documento se incluya en los resultados.

  • (): Delimitadores para subconsultas. Utilice los paréntesis para agrupar campos y valores para buscar.

Puede ejecutar queries comodín y expresiones regulares usando lo siguiente:

  • ?: Indica cualquier carácter para coincidir.

  • *: Indica 0 o más caracteres para que coincidan.

    El operador queryString no admite una query comodín con * como primer carácter en la query. El operador queryString trata cualquier carácter que preceda al * como prefijo o como caracteres que deben coincidir exactamente.

  • /: Delimitador para expresión regular.

  • ~: Indica búsqueda aproximada para encontrar cadenas similares al término de búsqueda con un máximo del número especificado de ediciones. Por ejemplo, { "query":"foo":"stop"~2 } es igual a lo siguiente:

    { "defaultPath": "foo", "query": "stop", "maxEdits": 2 }

    El operador queryString solo soporta una búsqueda difusa con hasta un máximo de 2 ediciones. Distancias más altas no son útiles, ya que los resultados pueden coincidir con muchos términos del diccionario.

    Si usas ~ con varios términos en una string, el operador queryString realiza una búsqueda de proximidad de los términos dentro del número especificado de términos. Por ejemplo, { "query":"foo":"New York"~2 } es igual a lo siguiente:

    { "defaultPath": "foo", "query": "New York", "slop": 2 }

Sí

score

Objeto

La puntuación asignada a los resultados de búsqueda coincidentes. Puedes modificar la puntuación por defecto usando las siguientes opciones:

  • boostMultiplica la puntuación resultante por el número dado.

  • constant: reemplazar la puntuación del resultado por el número dado.

  • function: reemplaza el resultado de la puntuación con la expresión dada.

Cuando se consultan valores en arreglos, MongoDB Search asigna mayores puntuaciones si más valores en el arreglo coinciden con la query.

Para obtener información sobre cómo usar score en tu query, consulta Calificación de los Documentos en los Resultados.

no

Por defecto, el texto operador utiliza el algoritmo de similitud bm25 para puntuar los documentos según su relevancia con respecto a la query.

Puede cambiar el algoritmo de similitud que se utiliza especificando un algoritmo de similitud diferente en la propiedad similarity.type para los campos string en su definición de índice de MongoDB Search. Para aprender a configurar un índice de MongoDB Search para el tipo string, se puede consultar Cómo indexar campos de string.

Para obtener más información sobre los algoritmos de similitud admitidos, consulta Detalles de la puntuación.

Los siguientes ejemplos utilizan la colección movies en la base de datos sample_mflix. Si tienes el conjunto de datos de muestra en el clúster, puedes crear el índice de búsqueda de MongoDB Search denominado default con mapeos dinámicos y ejecutar las queries de ejemplo en el clúster.

El siguiente ejemplo utiliza el operador queryString para consultar películas con el título Rocky y IV, 4 o Four en la ruta title de la colección movies. En la siguiente query, se especifica un campo en defaultPath, pero no se especifica ningún campo en query. La query incluye una etapa $project para excluir todos los campos excepto title.

1db.movies.aggregate([
2 {
3 $search: {
4 "queryString": {
5 "defaultPath": "title",
6 "query": "Rocky AND (IV OR 4 OR Four)"
7 }
8 }
9 },
10 {
11 $project: {
12 "_id": 0,
13 "title": 1
14 }
15 }
16])

Para esta query, MongoDB Search realiza una búsqueda en defaultPath porque no hay campos en el query. Devuelve los siguientes resultados:

{ "title" : "Rocky IV" }

Los ejemplos en esta sección utilizan el operador queryString para query tramas de películas que contengan los términos captain, kirk y chess. Este ejemplo muestra cómo diferentes agrupaciones de los mismos términos de búsqueda mediante paréntesis pueden dar lugar a que se incluyan diferentes documentos en los resultados de la búsqueda.

La query también incluye una etapa de $project para:

  • Excluir todos los campos excepto title, plot y fullpath

  • Añade un campo llamado score

La siguiente query busca chess y captain o kirk en el campo plot.

1db.movies.aggregate([
2 {
3 $search: {
4 "queryString": {
5 "defaultPath": "fullplot",
6 "query": "plot:(captain OR kirk) AND chess"
7 }
8 }
9 },
10 {
11 $project: {
12 "_id": 0,
13 "title": 1,
14 "plot": 1,
15 "fullplot": 1,
16 score: { $meta: "searchScore" }
17 }
18 }
19])
{
"fullplot" : "When the crew of the Enterprise is called back home, they find an unstoppable force of terror from within their own organization has detonated the fleet and everything it stands for, leaving our world in a state of crisis. With a personal score to settle, Captain Kirk leads a manhunt to a war-zone world to capture a one-man weapon of mass destruction. As our heroes are propelled into an epic chess game of life and death, love will be challenged, friendships will be torn apart, and sacrifices must be made for the only family Kirk has left: his crew.",
"plot" : "After the crew of the Enterprise find an unstoppable force of terror from within their own organization, Captain Kirk leads a manhunt to a war-zone world to capture a one-man weapon of mass destruction.",
"title" : "Star Trek Into Darkness",
"score" : 7.968792915344238
}

El documento en los resultados coincide porque el plot contiene los términos captain y kirk, aunque solo se necesita uno para cumplir con los criterios para una coincidencia, y el término chess, aunque no está en el plot, aparece en el fullplot, que es el defaultPath.

El siguiente ejemplo utiliza el operador queryString para query los títulos de películas, cubriendo un rango de valores textuales desde los caracteres count hasta cualquier carácter (definido usando el carácter comodín *), en orden alfabético ascendente.

1db.movies.aggregate([
2 {
3 "$search": {
4 "queryString": {
5 "defaultPath": "plot",
6 "query": "title:[count TO *]"
7 }
8 }
9 },
10 {
11 "$limit": 10
12 },
13 {
14 "$project": {
15 "_id": 0,
16 "title": 1
17 }
18 }
19])
1[
2 { title: 'Blacksmith Scene' },
3 { title: 'The Great Train Robbery' },
4 { title: 'The Land Beyond the Sunset' },
5 { title: 'A Corner in Wheat' },
6 { title: 'Winsor McCay, the Famous Cartoonist of the N.Y. Herald and His Moving Comics' },
7 { title: 'Traffic in Souls' },
8 { title: 'Gertie the Dinosaur' },
9 { title: 'In the Land of the Head Hunters' },
10 { title: 'The Perils of Pauline' },
11 { title: 'The Birth of a Nation' }
12]

Los resultados de MongoDB Search incluyen películas con los títulos Blacksmith Scene y A Corner in Wheat, aunque el rango en la query comienza desde el carácter count. Cuando indexas con el analizador por defecto, lucene.standard, MongoDB Search crea tokens separados para los términos en el campo title y coincide el query term con los tokens individuales. Específicamente, MongoDB Search crea los siguientes tokens, al menos uno de los cuales (indicado por √) coincide con los criterios de la query:

Título
Fichas del Analizador Estándar

Escena del herrero

blacksmithscene, √

A Corner in Wheat (Una esquina en el trigo)

a, corner, in, wheat √

Si indexas utilizando el analizador lucene.keyword, MongoDB Search crearía un único token para toda la cadena en el campo title, dando lugar a resultados similares a los siguientes para la misma query:

[
{ title: 'è Nous la Libertè' },
{ title: 'tom thumb' },
{ title: 'è nos amours' },
{ title: 'èke och hans vèrld' },
{ title: 'èdipussi' },
{ title: 's/y Glèdjen' },
{ title: 'èAy, Carmela!' },
{ title: 'èlisa' },
{ title: 'èxtasis' },
{ title: 'eXistenZ' }
]

Los siguientes ejemplos utilizan el operador queryString para query títulos de películas mediante expresiones difusas, comodín y regulares. Las queries incluyen una $project etapa para excluir todos los campos excepto title.

La siguiente query utiliza la función de búsqueda difusa (~) para buscar títulos de películas en el campo title que contengan términos similares a catch, con una variación de hasta dos caracteres.

1db.movies.aggregate([
2 {
3 "$search": {
4 "queryString": {
5 "defaultPath": "title",
6 "query": "catch~2"
7 }
8 }
9 },
10 {
11 "$limit": 10
12 },
13 {
14 "$project": {
15 "_id": 0,
16 "title": 1
17 }
18 }
19])
1[
2 { title: 'Catch-22' },
3 { title: 'Catch That Girl' },
4 { title: 'Catch That Kid' },
5 { title: 'Catch a Fire' },
6 { title: 'Catch Me Daddy' },
7 { title: 'Death Watch' },
8 { title: 'Patch Adams' },
9 { title: "Batch '81" },
10 { title: 'Briar Patch' },
11 { title: 'Night Watch' }
12]

La siguiente query busca el campo title en la colección movies para Marvel, Avengers, Iron Man o Captain America.

La siguiente query devuelve películas en los siguientes grupos (años) que coinciden con los criterios de búsqueda:

  • 2000, límite inferior inclusivo para este intervalo

  • 2005, límite superior exclusivo para el cubo 2000 y límite inferior inclusivo para este cubo

  • 2010, límite superior exclusivo para el cubo 2005 y límite inferior inclusivo para este cubo

  • 2015, límite superior exclusivo para el cubo 2010 y límite inferior inclusivo para este cubo

  • 2020, límite superior exclusivo para el intervalo 2015

1db.movies.aggregate([
2 {
3 "$searchMeta": {
4 "facet": {
5 "operator": {
6 "queryString": {
7 "defaultPath": "title",
8 "query": "\"Marvel\" OR \"Avengers\" OR \"Iron Man\" OR \"Captain America\""
9 }
10 },
11 "facets": {
12 "yearFacet": {
13 "type": "number",
14 "path": "year",
15 "boundaries": [1990, 2000, 2005, 2010, 2015, 2020 ]
16 }
17 }
18 }
19 }
20 }
21])