Definición
phraseEl operador
phraserealiza la búsqueda de documentos que contienen una secuencia ordenada de términos utilizando 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 consulta:
Campo | Tipo | Descripción | Necesidad |
|---|---|---|---|
| cadena o matriz de cadenas | Cadena o cadenas a buscar. | sí |
| cadena o matriz de cadenas | Campo o campos indexados para buscar. También puede especificar una ruta comodín para la búsqueda. IMPORTANTE: Para usar el | sí |
| entero | Distancia permitida entre palabras en la frase | no |
| Objeto | Puntuación para asignar a los resultados de búsqueda coincidentes. Puede modificar la puntuación predeterminada con las siguientes opciones:
Al consultar valores de una matriz, MongoDB Search asigna puntuaciones más altas si más valores en la matriz coinciden con la consulta. 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 tarda MongoDB Search en ejecutar consultas que utilizan asignaciones de sinónimos depende de la cantidad y el tamaño de los documentos en la colección de fuentes 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 puntuación
De forma predeterminada, el El operador defrase utiliza el bm25 algoritmo de similitud para puntuar los documentos según su relevancia para la consulta.
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 movies colección de la sample_mflix base de datos. Tras cargar el conjunto de datos de ejemplo en el clúster, cree el índice de búsqueda de MongoDB con asignaciones dinámicas y ejecute las consultas de ejemplo en el clúster. Para probar los ejemplos de sinónimos,también debe agregar la colección synonymous_terms a la sample_mflix base de datos y, a continuación,definir el índice con la synonyms colección de asignaciones.
Ejemplo de frase sencilla
El siguiente ejemplo de búsqueda de MongoDB realiza una búsqueda básica en el campo title para la cadena de consulta new york. No hay slop en la consulta, por lo que el valor predeterminado de slop es 0. Esto significa que la posición de las palabras debe coincidir exactamente con la cadena de consulta para que se incluyan en los resultados. La consulta también incluye:
$limitetapa para limitar la salida a 10 resultados.$projectEtapa para excluir todos los campos exceptotitley agregar un camposcorellamado.
Ejemplo básico
La siguiente consulta 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 consulta devuelve los resultados de metadatos para los criterios de búsqueda. Utiliza la etapa para obtener el número de películas en los siguientes grupos (años) que coinciden con los criterios de $searchMeta búsqueda:
2000, límite inferior inclusivo para este depósito
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 depósito 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 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 agregar un camposcorellamado.
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 búsqueda de MongoDB realiza una búsqueda en el title campo para la cadena de men women consulta. El slop valor de 5 en query permite mayor movimiento de palabras y mayor distancia entre las palabras men womeny. La consulta 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 consulta busca la frase automobile race en cualquier lugar 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.