Definición
phraseEl operador
phraserealiza una búsqueda de documentos que contienen una secuencia ordenada de términos usando el Analizador especificado en la configuración del índice. Si no se especifica ningún analizador, se utiliza el analizador estándar predeterminado.
Sintaxis
phrase tiene la siguiente sintaxis:
1 { 2 $search: { 3 "index": <index name>, // optional, defaults to "default" 4 "phrase": { 5 "query": "<search-string>", 6 "path": "<field-to-search>", 7 "score": <options>, 8 "slop": <distance-number>, 9 "synonyms": "<synonyms-mapping-name>" 10 } 11 } 12 }
opciones
phrase utiliza los siguientes términos para construir una query:
Campo | Tipo | Descripción | Necesidad |
|---|---|---|---|
| string o arreglo de strings | String o strings de búsqueda. | Sí |
| string o arreglo de strings | Campo o campos indexados para buscar. También puedes especificar una ruta comodín para buscar. IMPORTANTE: Para utilizar el operador | Sí |
| entero | Distancia permitida entre palabras en la frase | no |
| Objeto | Puntuación para asignar a los resultados de búsqueda coincidentes. Puedes modificar la puntuación por defecto usando las siguientes opciones:
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 las opciones para modificar la puntuación por defecto, consulta Puntúa los documentos en los resultados. | no |
| string | Es necesario para ejecutar queries utilizando synonyms. Nombre de la definición de asignación de sinónimos en la definición del índice. El valor no puede ser una cadena vacía. La cantidad de tiempo que MongoDB Search tarda en ejecutar consultas que utilizan mapeos de sinónimos depende del número y tamaño de los documentos en la colección de origen de sinónimos. Por ejemplo, una consulta que utiliza una asignación de sinónimos basada en muy pocos documentos de sinónimos podría ser más rápida que una consulta que utiliza una asignación de sinónimos basada en muchos documentos de sinónimos. | Opcional |
Comportamiento de la puntuación
De forma por defecto, la El operador phrase utiliza el algoritmo de similitud bm25 para puntuar documentos según su relevancia para la query.
Puede cambiar el algoritmo de similitud utilizado especificando uno diferente en la similarity.type propiedad para los string campos de la definición del índice de MongoDB Search. Para aprender a configurar un índice de MongoDB Search para el string tipo, consulte Cómo indexar campos de cadena.
Para obtener más información sobre los algoritmos de similitud admitidos, consulta Detalles de la puntuación.
Ejemplos
Los ejemplos de esta página utilizan la colección movies en la base de datos sample_mflix. Después de cargar el conjunto de datos de muestra en el clúster, cree el índice MongoDB Search con mapeos dinámicos y ejecute las consultas de ejemplo en su clúster. Para probar los ejemplos de sinónimos, también debes añadir la colección de términos sinónimos a la base de datos sample_mflix y luego definir el índice con la synonyms colección de mapeo.
Ejemplo de frase sencilla
El siguiente ejemplo de MongoDB Search realiza una búsqueda básica del campo title para el string del query new york. No hay slop en la query, por lo que el valor de slop se establece por defecto en 0, lo que significa que la posición de las palabras debe coincidir exactamente con la cadena de consulta para ser incluida en los resultados. La query también incluye un:
$limitstage para limitar la salida a 10 resultados.$projectetapa para excluir todos los campos exceptotitley añadir un campo llamadoscore.
Ejemplo básico
La siguiente query devuelve los documentos que coinciden con los criterios de búsqueda.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "phrase": { 5 "path": "title", 6 "query": "new york" 7 } 8 } 9 }, 10 { $limit: 10 }, 11 { 12 $project: { 13 "_id": 0, 14 "title": 1, 15 score: { $meta: "searchScore" } 16 } 17 } 18 ])
1 [ 2 { title: 'New York, New York', score: 6.786321640014648 } 3 { title: 'New York', score: 6.258549213409424 } 4 { title: 'New York Stories', score: 5.3813982009887695 } 5 { title: 'New York Minute', score: 5.3813982009887695 } 6 { title: 'Synecdoche, New York', score: 5.3813982009887695 } 7 { title: 'New York Doll', score: 5.3813982009887695 } 8 { title: 'Little New York', score: 5.3813982009887695 } 9 { title: 'Escape from New York', score: 4.719893455505371 } 10 { title: 'Naked in New York', score: 4.719893455505371 } 11 { title: 'Autumn in New York', score: 4.719893455505371 } 12 ]
Ejemplo de metadatos
La siguiente query devuelve los resultados de metadatos de los criterios de búsqueda. Utiliza la etapa $searchMeta para obtener el número de 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
2010, límite superior exclusivo para el intervalo 2010
Ejemplo
1 db.movies.aggregate([ 2 { 3 "$searchMeta": { 4 "facet": { 5 "operator": { 6 "phrase": { 7 "path": "title", 8 "query": "new york" 9 } 10 }, 11 "facets": { 12 "yearFacet": { 13 "type": "number", 14 "path": "year", 15 "boundaries": [2000, 2005, 2010, 2015 ] 16 } 17 } 18 } 19 } 20 } 21 ])
1 [ 2 { 3 count: { lowerBound: Long('27') }, 4 facet: { 5 yearFacet: { 6 buckets: [ 7 { _id: 2000, count: Long('3') }, 8 { _id: 2005, count: Long('8') }, 9 { _id: 2010, count: Long('4') } 10 ] 11 } 12 } 13 } 14 ]
Los resultados muestran que hay 3 películas entre 2000 y 2005, 8 películas entre 2005 y 2010, y 4 películas entre 2010 y 2015 que contienen el término new york en el title.
Ejemplo de frases múltiples
El siguiente ejemplo de MongoDB Search realiza una búsqueda básica en el campo title para los strings del query the man y the
moon. No hay slop en la consulta, por lo que el valor slop por defecto es 0, lo que significa que la posición de las palabras debe coincidir exactamente con la string del query para ser incluida en los resultados. La query también incluye un:
$limitetapa para limitar la salida a 10.$projectetapa para excluir todos los campos exceptotitley añadir un campo llamadoscore.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "phrase": { 5 "path": "title", 6 "query": ["the man", "the moon"] 7 } 8 } 9 }, 10 { $limit: 10 }, 11 { 12 $project: { 13 "_id": 0, 14 "title": 1, 15 score: { $meta: "searchScore" } 16 } 17 } 18 ])
1 [ 2 { title: 'The Man in the Moon', score: 4.4830474853515625 }, 3 { title: 'Shoot the Moon', score: 3.252699851989746 }, 4 { title: 'Kick the Moon', score: 3.252699851989746 }, 5 { title: 'The Man', score: 2.8923356533050537 }, 6 { title: 'The Moon and Sixpence', score: 2.8528637886047363 }, 7 { title: 'The Moon Is Blue', score: 2.8528637886047363 }, 8 { title: 'Racing with the Moon', score: 2.8528637886047363 }, 9 { title: 'Mountains of the Moon', score: 2.8528637886047363 }, 10 { title: 'Man on the Moon', score: 2.8528637886047363 }, 11 { title: 'Castaway on the Moon', score: 2.8528637886047363 } 12 ]
Ejemplo de slop
El siguiente ejemplo de MongoDB Search realiza una búsqueda en el campo title para la string del query men women. El valor de slop de 5 en el query permite un mayor movimiento de las palabras y distancia entre las palabras men y women. La query incluye una etapa $project para:
Excluir todos los campos excepto
titleAgregue un campo llamado
score
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "phrase": { 5 "path": "title", 6 "query": "men women", 7 "slop": 5 8 } 9 } 10 }, 11 { 12 $project: { 13 "_id": 0, 14 "title": 1, 15 score: { $meta: "searchScore" } 16 } 17 } 18 ])
1 [ 2 { title: 'Men Without Women', score: 3.367523193359375 }, 3 { title: 'Men Vs Women', score: 3.367523193359375 }, 4 { title: 'Good Men, Good Women', score: 2.8529787063598633 }, 5 { title: 'The War Between Men and Women', score: 2.1851978302001953 }, 6 { title: 'Women Without Men', score: 1.9656763076782227 }, 7 { title: 'Women Vs Men', score: 1.9656763076782227 } 8 ]
Sinónimos Ejemplo
Las siguientes consultas buscan plot en el campo de la movies colección los términos de la cadena de consulta dada. MongoDB Search devuelve resultados según el tipo de asignación en la colección de origen de sinónimos,, synonymous_terms especificado en la definición de asignación de sinónimos del índice de la sample_mflix.movies colección.
La siguiente query busca la frase automobile race en cualquier parte del campo plot, con una distancia de hasta 5 entre los términos.
db.movies.aggregate([ { $search: { "phrase": { "path": "plot", "query": "automobile race", "slop": 5, "synonyms": "my_synonyms" } } }, { "$limit": 5 }, { $project: { "_id": 0, "plot": 1, "title": 1, score: { $meta: "searchScore" } } } ])
[ { plot: 'When a popular daredevil proposes an automobile race across three continents, his arch rival vows to beat him, while an ambitious female reporter has her own plans for victory.', title: 'The Great Race', score: 29.569732666015625 }, { plot: 'A wide variety of eccentric competitors participate in a wild and illegal cross-country car race.', title: 'The Cannonball Run', score: 25.50379180908203 }, { plot: 'A mechanic takes his family to a car race and a series of events occur which brings problems, betrayals, violence and the unexpected death of an elderly person.', title: 'National Mechanics', score: 21.538257598876953 }, { plot: "It's time for the annual London to Brighton antique car rally, and Alan McKim and Ambrose Claverhouse are not going to let their friendship stop them from trying to humiliate each other. ...", title: 'Genevieve', score: 20.19266128540039 }, { plot: "A naive drifter runs away from his army father in hopes of making it on the car racing circuit. In Las Vegas, he meets a young scam artist, who develops a crush on him. He is then ...", title: 'Speedway Junky', score: 18.639965057373047 } ]
Los documentos en los resultados contienen los siguientes términos en el campo plot con una distancia de hasta 5 entre los términos:
automobile,car, ovehicle, que se describen comoequivalentsinónimos en la colecciónsynonymous_terms,race,contestorally, que se definen como sinónimos deexpliciten la colección sy``sinonymous_terms``.
MongoDB Search devuelve resultados similares para la búsqueda de car race o vehicle
race, ya que configuramos automobile, car y vehicle como sinónimos de equivalent. Sin embargo, los resultados para automobile
contest no incluyen documentos con race ni rally, y los resultados para automobile rally no incluyen documentos con race ni contest, ya que no configuramos contest ni rally como sinónimos de ningún término.