Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

phrase (MongoDB Search Operador)

phrase

El operador phrase realiza 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.

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}

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

Campo
Tipo
Descripción
Necesidad

query

string o arreglo de strings

String o strings de búsqueda.

path

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 phrase, debes indexar el campo de consulta como tipo string con la propiedad indexOptions configurada en positions o el valor por defecto, offsets. Para obtener más información, consulte Configurar propiedades del campo de string.

slop

entero

Distancia permitida entre palabras en la frase query. Un valor más bajo permite una menor distancia posicional entre las palabras, y un valor más alto permite una mayor reorganización de las palabras y más distancia entre ellas para satisfacer la query. Por defecto es 0, lo que significa que las palabras deben estar exactamente en la misma posición que en la consulta para que se consideren coincidentes. Las coincidencias exactas reciben una puntuación más alta.

no

score

Objeto

Puntuación para asignar 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:reemplace la puntuación del resultado con 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 las opciones para modificar la puntuación por defecto, consulta Puntúa los documentos en los resultados.

no

synonyms

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

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.

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.

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:

  • $limit stage para limitar la salida a 10 resultados.

  • $project etapa para excluir todos los campos excepto title y añadir un campo llamado score.

La siguiente query devuelve los documentos que coinciden con los criterios de búsqueda.

1db.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]

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

1db.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.

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:

  • $limit etapa para limitar la salida a 10.

  • $project etapa para excluir todos los campos excepto title y añadir un campo llamado score.

1db.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]

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 title

  • Agregue un campo llamado score

1db.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]

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, o vehicle, que se describen como equivalent sinónimos en la colección synonymous_terms,

  • race, contest o rally, que se definen como sinónimos de explicit en 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.

Volver

near

En esta página