Definición
Nota
El operador span ha quedado obsoleto. En su lugar, utilice la frase.
spanEl operador
spanencuentra 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 operadorspanes más intensivo a nivel computacional que otros operadores, porque las consultas deben rastrear la información posicional.spanes un operador a nivel de término, lo que significa que el campoqueryno está analizado. Los operadores de nivel de término funcionan bien con el Analizador de palabras clave porque el campoqueryse trata como un solo término, incluyendo caracteres especiales.spanlas query no se clasifican por puntuación.
Sintaxis
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 usar el operador compuesto.
Operador de términos
Puedes usar el operador term para especificar los términos a buscar. El operador term es obligatorio y cuando se utiliza con los operadores posicionales span, debe ser el elemento más interno de los operadores posicionales.
Sintaxis
El operador term tiene la siguiente sintaxis:
"term": { "path": "<path-to-field>", "query": "<terms-to-search>" }
Campos
El operador term toma los siguientes campos:
Opción | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Campo indexado para buscar. |
| string | Sí | Término o frase para búsqueda. |
Operadores posicionales
You can use the positional operators to specify the position of the terms that you want to search with the term operator. The positional operators are of type document. You must specify at least one positional operator in your span operator query. The positional operators can take other span positional operators, recursively.
Nota
Sobre los ejemplos
The examples on this page use the sample_mflix.movies collection. If you load the sample data and create a dynamic index named default on the movies collection , you can run the following $search sample queries against the collection. The sample queries use the $limit stage to limit the results to 5 documents and the $project stage to exclude all fields except the title field in the results.
span toma los siguientes operadores posicionales opcionales.
contains
The contains positional operator matches terms that are contained within other terms. You can use positional operators recursively or just the term operator within contains to specify the search terms.
Sintaxis
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> } } } } }
Campos
El operador posicional contains toma los siguientes campos:
Campos | Tipo | ¿Requerido? | Descripción | ||||
|---|---|---|---|---|---|---|---|
| Documento | Sí | One or more positional operators specified recursively or just the term operator. The following table shows the type of query that
| ||||
| Documento | Sí | One or more positional operators specified recursively or just the term operator. The following table shows the type of query that
| ||||
| Documento | no | Puntuación para aplicar a los resultados de esta búsqueda. | ||||
| string | Sí | Tipo de query a ejecutar y resultados coincidentes a devolver. El valor puede ser uno de los siguientes:
|
Ejemplo
La siguiente query de ejemplo utiliza span.contains para encontrar documentos en los que el término train aparece con los términos great y robbery, donde great y robbery pueden estar separados hasta por 5 posiciones en el campo title.
1 db.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 usando el little) dentro de los términos great y robbery (especificados usando el big). Si se configura spanToReturn en la línea 6 como inner, MongoDB Search devuelve los mismos documentos porque el término train (especificado mediante little) aparece dentro de los términos great y robbery (especificados mediante big).
first
The first positional operator identifies the position of the search term by using a specified number. You can specify the search terms using positional operators recursively, or just the term operator. span matches documents where the position of the search term is less than or equal to the specified number.
Sintaxis
El operador posicional first tiene la siguiente sintaxis:
{ "$search": { "span": { "first": { "endPositionLte": <term-position>, "operator": { <span-positional-or-term-operator-specification> }, "score": { <score-options> } } } } }
Campos
El operador posicional first toma los siguientes campos:
Opción | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| 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 |
| Documento | Sí | Document that contains the positional operators or term operator options. |
| Documento | no | Puntuación para aplicar a los resultados de esta búsqueda. |
Ejemplo
Las siguientes consultas de ejemplo utilizan span.first para encontrar documentos en los que la string 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 segunda palabra en el campo.
1 db.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.
1 db.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 title porque el ejemplo incluye el operador or clauses para especificar los términos de búsqueda.
near
El operador posicional near coincide con dos o más cláusulas que contienen el término de búsqueda cerca unas de otras. Puedes especificar los términos de búsqueda utilizando una lista de operadores posicionales recursivamente o simplemente el operador término.
Sintaxis
El operador posicional near tiene la siguiente sintaxis:
{ "$search": { "span": { "near": { "clauses": [ { <span-positional-or-term-operator-specification> }, ... ], "slop": <distance-number>, "inOrder": true|false } } } }
Campos
El operador posicional near toma los siguientes campos:
Campo | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| arreglo de documentos | Sí | Span clauses that must be near one another. Clauses can't be empty. Each document contains |
| booleano | no | Indicador que especifica si la búsqueda de términos en las cláusulas debe realizarse en el orden especificado y no debe superponerse. El valor puede ser uno de los siguientes:
Si se omite, es por defecto |
| Documento | no | Puntuación para aplicar a los resultados de esta búsqueda. |
| entero | no | Distancia permitida entre términos en las cláusulas. Los valores más bajos permiten una menor distancia posicional entre los términos y los valores más altos permiten una mayor distancia entre las palabras para satisfacer la query. La opción por defecto es |
Ejemplo
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.
1 db.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.
or
El operador posicional or coincide con cualquiera de dos o más cláusulas. Se pueden especificar los términos de búsqueda utilizando una lista de operadores posicionales de forma recursiva o simplemente el operador de términos.
Sintaxis
El operador posicional or tiene la siguiente sintaxis:
{ "$search": { "span": { "or": { "clauses": [ { <span-positional-or-term-operator-specification> }, ... ], "score": { <scoring-options> } } } } }
Campos
El operador posicional or toma los siguientes campos:
Opción | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| arreglo de documentos | Sí | Span clauses that specify the search terms. One of the clauses must match, and clauses can't be empty. Each document must contain |
| Documento | no | Puntuación para aplicar a los resultados de esta búsqueda. |
Ejemplo
The following example query uses span.or clauses to specify two term operator queries that search for documents in which the title field has either city or country.
1 db.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.
subtract
The subtract positional operator removes matches that overlap with another match. You can specify the search terms using a list of positional operators recursively or just the term operator. The subtract clause can be used to exclude certain strings from your search results.
Sintaxis
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> } } } } }
Campos
El operador posicional subtract toma los siguientes campos:
Opción | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| Documento | Sí | Document that specifies the term or phrase matches to remove that overlap with the term or phrase matches specified in the |
| Documento | Sí | Document that specifies the term matches to include using any positional operators or just the term operator. |
| Documento | no | Puntuación para aplicar a los resultados de esta búsqueda. |
Ejemplo
La siguiente query de ejemplo utiliza span.subtract para buscar documentos en los que el campo title contenga las palabras father y son, en cualquier orden, a una distancia máxima de 3 palabras entre sí. Excluye cualquier documento en el que la palabra like aparezca entre father y son.
1 db.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 cual está en el criterio exclude de la query.