Docs Menu
Docs Home
/ /

span (Operador de búsqueda de MongoDB)

Nota

El operador span está obsoleto. En su lugar, utilice el frase.

span

El operador span encuentra coincidencias de búsqueda de texto dentro de regiones de un campo de texto. Puedes usarlo para encontrar cadenas que estén cerca unas de otras en grados especificados de precisión. El operador span es más intensivo a nivel computacional que otros operadores, porque las consultas deben rastrear la información posicional.

span Es un operador a nivel de término, lo que significa que el query campo no se analiza. Los operadores a nivel de término funcionan bien con el Analizador de Palabras Clave porque el query campo se trata como un solo término, con caracteres especiales incluidos.

span Las consultas no se clasifican por puntuación.

span tiene la siguiente sintaxis:

{
$search: {
"index": <index name>, // optional, defaults to "default"
"span": {
"term" | <positional-operator>": {
<operator-specification>
}
}
}
}

Nota

span Las consultas de búsqueda no pueden utilizar el operador compuesto.

Puede usar el operador term para especificar los términos de búsqueda. El operador term es obligatorio y, al usarlo con span, operadores posicionales, debe ser el hijo más interno de los operadores posicionales.

El operador term tiene la siguiente sintaxis:

"term": {
"path": "<path-to-field>",
"query": "<terms-to-search>"
}

El operador term toma los siguientes campos:

Opción
Tipo
¿Obligatorio?
Descripción

path

string

Campo indexado para buscar.

query

string

Término o frase para búsqueda.

Puede usar los operadores posicionales para especificar la posición de los términos que desea buscar con el operador de término. Los operadores posicionales son de document tipo. Debe especificar al menos un operador posicional en su span consulta de operador. Los operadores posicionales pueden aceptar otros span operadores posicionales recursivamente.

Nota

Acerca de los ejemplos

Los ejemplos de esta página utilizan la colección sample_mflix.movies. Si carga los datos de ejemplo y crea un índice dinámico llamado default en la colección de películas, puede ejecutar las siguientes$searchconsultas de ejemplo en la colección. Las consultas de ejemplo utilizan la etapa$limitpara limitar los resultados a 5 documentos y la etapa$projectpara excluir todos los campos excepto el campo title de los resultados.

span toma los siguientes operadores posicionales opcionales.

El contains operador posicional coincide con términos incluidos en otros términos. Puede usar operadores posicionales recursivamente o simplemente el operador de término dentro de contains para especificar los términos de búsqueda.

El operador posicional contains tiene la siguiente sintaxis:

{
"$search": {
"span": {
"contains": {
"spanToReturn": "inner"|"outer",
"little": { <positional-or-term-operator-specification> },
"big": { <positional-or-term-operator-specification> }
}
}
}
}

El operador posicional contains toma los siguientes campos:

Campos
Tipo
¿Obligatorio?
Descripción

big

Documento

Uno o más operadores posicionales especificados recursivamente o solo el operador de término. La siguiente tabla muestra el tipo de consulta que span ejecuta para big según el valor spanToReturn de.

outer

span coincide con términos de big que contienen al menos un término little de.

inner

span coincide con términos de little que están dentro de términos big de.

little

Documento

Uno o más operadores posicionales especificados recursivamente o solo el operador de término. La siguiente tabla muestra el tipo de consulta que span ejecuta para little según el valor spanToReturn de.

inner

span coincide con términos de little que están dentro de términos big de.

outer

span coincide con términos de big que contienen al menos un término little de.

score

Documento

no

Puntuación a aplicar a los resultados de esta búsqueda.

spanToReturn

string

Tipo de consulta a ejecutar y resultados coincidentes a devolver. El valor puede ser uno de los siguientes:

  • inner - para ejecutar una consulta interna que coincida con los términos de little que están dentro de los términos de big

  • outer - para ejecutar una consulta que coincida con términos de big que contengan al menos un término de little

La siguiente consulta de ejemplo utiliza span.contains para buscar documentos en los que el término train aparece con los términos great y robbery, donde great y robbery pueden estar hasta 5 posiciones separados en el campo title.

1db.movies.aggregate([
2 {
3 "$search": {
4 "span": {
5 "contains": {
6 "spanToReturn": "outer",
7 "little": {
8 "term": {
9 "path": "title",
10 "query": "train"
11 }
12 },
13 "big": {
14 "near": {
15 "clauses": [
16 {
17 "term": {
18 "path": "title",
19 "query": "great"
20 }
21 },
22 {
23 "term": {
24 "path": "title",
25 "query": "robbery"
26 }
27 }
28 ],
29 "slop": 5
30 }
31 }
32 }
33 }
34 }
35 },
36 {
37 "$limit": 5
38 },
39 {
40 "$project": {
41 "_id": 0,
42 "title": 1
43 }
44 }
45])
[
{ title: 'The Great Train Robbery' },
{ title: 'The Great Train Robbery' },
{ title: "The Great St. Trinian's Train Robbery" }
]

MongoDB Search devuelve documentos que contienen el término train (especificado little con) dentro de los términos great y robbery (especificados big con). Si establece spanToReturn en la línea 6 innercomo, MongoDB Search devuelve los mismos documentos porque el término train (especificado little con) aparece dentro de los términos great y robbery (especificados big con).

El first operador posicional identifica la posición del término de búsqueda mediante un número específico. Puede especificar los términos de búsqueda mediante operadores posicionales recursivos o simplemente el operador de término. span encuentra documentos donde la posición del término de búsqueda es menor o igual que el número especificado.

El operador posicional first tiene la siguiente sintaxis:

{
"$search": {
"span": {
"first": {
"endPositionLte": <term-position>,
"operator": { <span-positional-or-term-operator-specification> },
"score": { <score-options> }
}
}
}
}

El operador posicional first toma los siguientes campos:

Opción
Tipo
¿Obligatorio?
Descripción

endPositionLte

Int

no

Número que especifica la posición del término de búsqueda. Si especificas una búsqueda de varios términos, el último término debe ser menor o igual a este valor. Si se omite, el valor por defecto es 3.

operator

Documento

Documento que contiene las opciones de operadores posicionales u operadores de término.

score

Documento

no

Puntuación a aplicar a los resultados de esta búsqueda.

Las siguientes consultas de ejemplo utilizan span.first para buscar documentos en los que la cadena especificada aparece en el campo title. El parámetro endPositionLte tiene un valor de 2, lo que significa que el término de búsqueda especificado con el operador term debe ser la primera o la segunda palabra del campo.

1db.movies.aggregate([
2 {
3 "$search": {
4 "span": {
5 "first": {
6 "endPositionLte": 2,
7 "operator": {
8 "term": {
9 "path": "title",
10 "query": "dance"
11 }
12 }
13 }
14 }
15 }
16 },
17 {
18 "$limit": 5
19 },
20 {
21 "$project": {
22 "_id": 0,
23 "title": 1
24 }
25 }
26])
[
{ title: 'Dance Program' },
{ title: 'Slam Dance' },
{ title: 'Last Dance' },
{ title: 'War Dance' },
{ title: 'Delhi Dance' }
]

MongoDB Search devuelve los documentos que contienen la palabra de búsqueda dance en la primera o segunda posición del campo title.

1db.movies.aggregate([
2 {
3 "$search": {
4 "span": {
5 "first": {
6 "endPositionLte": 2,
7 "operator": {
8 "or": {
9 "clauses": [
10 { "term": { "path": "title", "query": "man" } },
11 { "term": { "path": "title", "query": "woman" } }
12 ]
13 }
14 }
15 }
16 }
17 }
18 },
19 {
20 "$limit": 5
21 },
22 {
23 "$project": {
24 "_id": 0,
25 "title": 1
26 }
27 }
28])
[
{ title: "Everybody's Woman" },
{ title: 'Marked Woman' },
{ title: 'Wonder Man' },
{ title: 'Designing Woman' },
{ title: 'Watermelon Man' }
]

MongoDB Search devuelve documentos que contienen la palabra de búsqueda man o woman en la primera o segunda posición del campo title. MongoDB Search no devuelve ambos términos de búsqueda en el mismo campo title porque el ejemplo incluye el operador or clauses para especificar los términos de búsqueda.

El near operador posicional coincide con dos o más cláusulas que contienen el término de búsqueda cerca una de la otra. Puede especificar los términos de búsqueda utilizando una lista de operadores posicionales recursivamente o simplemente el operador de término.

El operador posicional near tiene la siguiente sintaxis:

{
"$search": {
"span": {
"near": {
"clauses": [
{ <span-positional-or-term-operator-specification> },
...
],
"slop": <distance-number>,
"inOrder": true|false
}
}
}
}

El operador posicional near toma los siguientes campos:

Campo
Tipo
¿Obligatorio?
Descripción

clauses

conjunto de documentos

Las cláusulas Span deben estar próximas entre sí. No pueden estar vacías. Cada documento contiene span opciones posicionales o solo el operador de término.

inOrder

booleano

no

Bandera que especifica si la búsqueda de términos en las cláusulas debe realizarse en el orden especificado y no deben superponerse.

El valor puede ser uno de los siguientes:

  • true - buscar términos en las cláusulas en el orden especificado, sin superposiciones

  • false - para buscar términos en las cláusulas en cualquier orden

Si se omite, es por defecto false.

score

Documento

no

Puntuación a aplicar a los resultados de esta búsqueda.

slop

entero

no

Distancia permitida entre términos en las cláusulas. Los valores bajos permiten una menor distancia posicional entre los términos, mientras que los valores altos permiten una mayor distancia entre las palabras para satisfacer la consulta. El valor predeterminado es 0, lo que significa que las palabras en las diferentes cláusulas deben ser adyacentes para que se considere una coincidencia.

La siguiente query de ejemplo usa span.near para buscar documentos en los que las cadenas prince y pauper se encuentren cercanas entre sí. El parámetro inOrder está establecido en false, por lo que los términos de búsqueda pueden estar en cualquier orden. El parámetro slop está establecido en 4, por lo que los términos de búsqueda pueden estar separados por hasta solo 4 palabras.

1db.movies.aggregate([
2 {
3 "$search" : {
4 "span": {
5 "near": {
6 "clauses": [
7 { "term": { "path": "title", "query": "prince" } },
8 { "term": { "path": "title", "query": "pauper" } }
9 ],
10 "slop": 4,
11 "inOrder": false
12 }
13 }
14 }
15 },
16 {
17 "$limit": 5
18 },
19 {
20 "$project": {
21 "_id": 0,
22 "title": 1
23 }
24 }
25])
[ { title: 'The Prince and the Pauper' } ]

MongoDB Search devuelve un documento que contiene las palabras de búsqueda prince y pauper, separadas por menos de cuatro palabras, en el campo title.

El or operador posicional coincide con dos o más cláusulas. Puede especificar los términos de búsqueda utilizando una lista de operadores posicionales recursivamente o simplemente el operador de término.

El operador posicional or tiene la siguiente sintaxis:

{
"$search": {
"span": {
"or": {
"clauses": [
{ <span-positional-or-term-operator-specification> },
...
],
"score": { <scoring-options> }
}
}
}
}

El operador posicional or toma los siguientes campos:

Opción
Tipo
¿Obligatorio?
Descripción

clauses

conjunto de documentos

Cláusulas Span que especifican los términos de búsqueda. Una de las cláusulas debe coincidir y ninguna puede estar vacía. Cada documento debe contener span operadores posicionales especificados recursivamente o solo las opciones del operador de término.

score

Documento

no

Puntuación a aplicar a los resultados de esta búsqueda.

La siguiente consulta de ejemplo utiliza span.or cláusulas para especificar dos consultas de operador de término que buscan documentos en los que el title campo tiene city countryo.

1db.movies.aggregate([
2 {
3 "$search" : {
4 "span": {
5 "or": {
6 "clauses": [
7 { "term": { "path": "title", "query": "city" } },
8 { "term": { "path": "title", "query": "country" } }
9 ],
10 }
11 }
12 }
13 },
14 {
15 "$limit": 5
16 },
17 {
18 "$project": {
19 "_id": 0,
20 "title": 1
21 }
22 }
23])
[
{ title: 'Country' },
{ title: 'City Lights' },
{ title: 'King & Country' },
{ title: 'Fat City' },
{ title: 'Atlantic City' }
]

MongoDB Search devuelve los documentos que contienen las palabras de búsqueda city o country en el campo title, pero no ambas en el mismo title.

El subtract operador posicional elimina las coincidencias que se superponen con otra. Puede especificar los términos de búsqueda mediante una lista de operadores posicionales recursivamente o simplemente el operador de término. La subtract cláusula puede utilizarse para excluir ciertas cadenas de los resultados de búsqueda.

El operador posicional subtract tiene la siguiente sintaxis:

{
"$search": {
"span": {
"subtract": {
"include": { <span-positional-or-term-operator-specification> },
"exclude": { <span-positional-or-term-operator-specification> }
}
}
}
}

El operador posicional subtract toma los siguientes campos:

Opción
Tipo
¿Obligatorio?
Descripción

exclude

Documento

Documento que especifica las coincidencias de términos o frases para eliminar la superposición con las coincidencias especificadas en el include campo. Puede especificar el término o la frase utilizando cualquier operador posicional de extensión y el operador de término.

include

Documento

Documento que especifica que el término coincide con el uso de cualquier operador posicional o solo el operador de término.

score

Documento

no

Puntuación a aplicar a los resultados de esta búsqueda.

La siguiente consulta de ejemplo utiliza span.subtract para buscar documentos cuyo campo title contenga las palabras father y son, en cualquier orden, con una separación de 3 palabras. Excluye cualquier documento donde la palabra like aparezca entre father y son.

1db.movies.aggregate([
2 {
3 "$search" : {
4 "span": {
5 "subtract": {
6 "include": {
7 "near": {
8 "clauses": [
9 { "term": { "path": "title", "query": "father" } },
10 { "term": { "path": "title", "query": "son" } }
11 ],
12 "inOrder": false,
13 "slop": 3
14 }
15 },
16 "exclude": { "term": { "path": "title", "query": "like" } }
17 }
18 }
19 }
20 },
21 {
22 "$limit": 5
23 },
24 {
25 "$project": {
26 "_id": 0,
27 "title": 1
28 }
29 }
30])
[
{ title: 'Father, Son & Holy Cow' },
{ title: 'My Father and My Son' },
{ title: 'Jimmy Rosenberg: The Father, the Son & the Talent' }
]

MongoDB Search no devuelve el documento con el título Like Father Like Son porque, aunque el campo title incluye las palabras father y son, también tiene like entre ellas, lo que está dentro del criterio exclude de la consulta.

Volver

regex

En esta página