Docs Menu
Docs Home
/ /

phrase (Operador de búsqueda de MongoDB)

phrase

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

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 consulta:

Campo
Tipo
Descripción
Necesidad

query

cadena o matriz de cadenas

Cadena o cadenas a buscar.

path

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 phrase operador, debe indexar el campo de consulta como tipo string con la indexOptions propiedad establecida en o en el positions valor predeterminado,. offsets Para obtener más información, consulte Configurar propiedades de campos de cadena.

slop

entero

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

no

score

Objeto

Puntuación para asignar a los resultados de búsqueda coincidentes. Puede modificar la puntuación predeterminada con las siguientes opciones:

  • boost:multiplica la puntuación del resultado por el número dado.

  • constant:reemplace la puntuación del resultado con el número dado.

  • function:reemplace la puntuación del resultado con la expresión dada.

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

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 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

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.

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.

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:

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

  • $project Etapa para excluir todos los campos excepto title y agregar un campo score llamado.

La siguiente consulta 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 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

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 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 agregar un campo score llamado.

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 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 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 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, 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