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

Modificar la puntuación

Las siguientes opciones de modificación de puntaje están disponibles para todos los operadores. Para detalles y ejemplos, haz clic en cualquiera de las siguientes opciones:

La opción boost multiplica la puntuación base de un resultado por un número determinado o el valor de un campo numérico en los documentos. Por ejemplo, puede usar boost para aumentar la importancia de ciertos documentos coincidentes en el resultado.

Nota

  • No puedes usar las opciones boost y constant juntas.

  • La opción boost con path es igual que multiplicar usando la function opción con una expresión de ruta.

La opción boost toma los siguientes campos:

Campo
Tipo
Necesidad
Descripción

value

float

Condicional

Número por el cual multiplicar la puntuación base por defecto. El valor debe ser un número positivo. Se requiere value o path, pero no puedes especificar ambos.

path

string

Condicional

Nombre del campo numérico cuyo valor se debe multiplicar por la puntuación base por defecto. Se requiere path o value, pero no se pueden especificar ambos.

undefined

float

Opcional

Valor numérico para reemplazar path si el campo numérico especificado a través de path no se encuentra en los documentos. Si se omite, el valor por defecto será 0. Solo puede especificar esto si especifica path.

Los siguientes ejemplos utilizan la colección movies en la base de datos sample_mflix. Si tienes la conjunto de datos de muestra en su clúster, puede crear el índice MongoDB Search default y ejecutar las consultas de ejemplo en su clúster.

Las queries compuestas de muestra demuestran cómo aumentar la importancia de un criterio de búsqueda sobre otro. Las consultas incluyen una etapa $project para excluir todos los campos excepto title y score.

En el siguiente ejemplo, el operador compuesto utiliza el operador de texto para buscar el término Helsinki en los campos plot y title. La query para el campo title usa score con la opción boost para multiplicar los resultados de la puntuación por 3, tal como se especifica en el campo value.

1db.movies.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "should": [{
6 "text": {
7 "query": "Helsinki",
8 "path": "plot"
9 }
10 },
11 {
12 "text": {
13 "query": "Helsinki",
14 "path": "title",
15 "score": { "boost": { "value": 3 } }
16 }
17 }]
18 }
19 }
20 },
21 {
22 "$limit": 5
23 },
24 {
25 "$project": {
26 "_id": 0,
27 "title": 1,
28 "plot": 1,
29 "score": { "$meta": "searchScore" }
30 }
31 }
32])

Esta query devuelve los siguientes resultados, en los que la puntuación de los documentos donde el title coincide con el término de consulta se multiplica por 3 desde su valor base:

[
{
plot: 'Epic tale about two generations of men in a wealthy Finnish family, spanning from the 1960s all the way through the early 1990s. The father has achieved his position as director of the ...',
title: 'Kites Over Helsinki',
score: 12.2470121383667
},
{
plot: 'Alex is Finlander married to an Italian who works as a taxi driver in Berlin. One night in his taxi come two men with a briefcase full of money. Unluckily for Alex, they are being chased by...',
title: 'Helsinki-Naples All Night Long',
score: 9.56808090209961
},
{
plot: 'The recession hits a couple in Helsinki.',
title: 'Drifting Clouds',
score: 4.5660295486450195
},
{
plot: 'Two teenagers from Helsinki are sent on a mission by their drug dealer.',
title: 'Sairaan kaunis maailma',
score: 4.041563034057617
},
{
plot: 'A murderer tries to leave his criminal past in East Helsinki and make a new life for his family',
title: 'Bad Luck Love',
score: 3.6251673698425293
}
]

En el siguiente ejemplo, el operador compuesto utiliza el operador de texto para buscar el término Helsinki en los campos plot y title. La query sobre el campo title utiliza score con la opción boost para multiplicar los resultados de puntaje por el campo numérico imdb.rating en path. Si no se encuentra el campo numérico en el path especificado, el operador multiplica la puntuación de los documentos por 3.

1db.movies.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "should": [{
6 "text": {
7 "query": "Helsinki",
8 "path": "plot"
9 }
10 },
11 {
12 "text": {
13 "query": "Helsinki",
14 "path": "title",
15 "score": {
16 "boost": {
17 "path": "imdb.rating",
18 "undefined": 3
19 }
20 }
21 }
22 }]
23 }
24 }
25 },
26 {
27 "$limit": 5
28 },
29 {
30 "$project": {
31 "_id": 0,
32 "title": 1,
33 "plot": 1,
34 "score": { "$meta": "searchScore" }
35 }
36 }
37])

Esta consulta devuelve los siguientes resultados, en los que la puntuación de los documentos donde el campo title coincide con el término de consulta se multiplica a partir de su valor base por el valor del campo numérico imdb.rating o 3, si el campo no se encuentra en los documentos:

[
{
plot: 'Epic tale about two generations of men in a wealthy Finnish family, spanning from the 1960s all the way through the early 1990s. The father has achieved his position as director of the ...',
title: 'Kites Over Helsinki',
score: 24.902257919311523
},
{
plot: 'Alex is Finlander married to an Italian who works as a taxi driver in Berlin. One night in his taxi come two men with a briefcase full of money. Unluckily for Alex, they are being chased by...',
title: 'Helsinki-Naples All Night Long',
score: 20.411907196044922
},
{
plot: 'The recession hits a couple in Helsinki.',
title: 'Drifting Clouds',
score: 4.5660295486450195
},
{
plot: 'Two teenagers from Helsinki are sent on a mission by their drug dealer.',
title: 'Sairaan kaunis maailma',
score: 4.041563034057617
},
{
plot: 'A murderer tries to leave his criminal past in East Helsinki and make a new life for his family',
title: 'Bad Luck Love',
score: 3.6251673698425293
}
]

La opción constant reemplaza la puntuación base con un número especificado.

Nota

No debes usar las opciones constant y boost juntas.

El siguiente ejemplo utiliza el índice por defecto en la colección sample_mflix.movies para query los campos plot y title utilizando el operador compuesto. En la consulta, el operador text utiliza score con la opción constant para reemplazar todos los resultados de puntuación con 5 para los resultados que solo coincidan con el campo title.

1db.movies.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "should": [{
6 "text": {
7 "query": "tower",
8 "path": "plot"
9 }
10 },
11 {
12 "text": {
13 "query": "tower",
14 "path": "title",
15 "score": { "constant": { "value": 5 } }
16 }
17 }]
18 }
19 }
20 },
21 {
22 "$limit": 5
23 },
24 {
25 "$project": {
26 "_id": 0,
27 "title": 1,
28 "plot": 1,
29 "score": { "$meta": "searchScore" }
30 }
31 }
32])

La consulta anterior devuelve los siguientes resultados, en los que la puntuación de los documentos que coinciden con la query solo en el campo title se reemplaza con el valor constant especificado:

1[
2 {
3 plot: 'Several months after witnessing a murder, residents of Tower Block 31 find themselves being picked off by a sniper, pitting those lucky enough to be alive into a battle for survival.',
4 title: 'Tower Block',
5 score: 8.15460205078125
6 },
7 {
8 plot: "When a group of hard-working guys find out they've fallen victim to their wealthy employer's Ponzi scheme, they conspire to rob his high-rise residence.",
9 title: 'Tower Heist',
10 score: 5
11 },
12 {
13 plot: 'Toru Kojima and his friend Koji are young student boys with one thing in common - they both love to date older women. Koji is a playboy with several women, young and older, whereas Toru is a romantic with his heart set on on certain lady.',
14 title: 'Tokyo Tower',
15 score: 5
16 },
17 {
18 plot: 'A middle-aged mental patient suffering from a split personality travels to Italy where his two personalities set off all kinds of confusing developments.',
19 title: 'The Leaning Tower',
20 score: 5
21 },
22 {
23 plot: 'A documentary that questions the cost -- and value -- of higher education in the United States.',
24 title: 'Ivory Tower',
25 score: 5
26 }
27]

Nota

Puedes utilizar esta opción solo con el operador embeddedDocument.

La opción embedded te permite configurar cómo:

  • Agrega los puntajes de varios documentos incrustados coincidentes.

  • Modifica la puntuación de un documento incrustado operador después de sumar las puntuaciones de los documentos insertados que coincidan.

Nota

El tipo embeddedDocuments de MongoDB Search, el operador embeddedDocument y la opción de puntuación embedded están en vista previa.

La opción embedded toma los siguientes campos:

Campo
Tipo
Necesidad
Descripción

aggregate

string

Opcional

Configura cómo combinar los puntajes de documentos incrustados coincidentes. El valor debe ser una de las siguientes estrategias de agregación:

  • sum - (por defecto) Sumar el puntaje de todos los documentos incrustados que coincidan.

  • maximum - Elija la puntuación más alta de todos los documentos incrustados que coincidan.

  • minimum - Elegir la puntuación más baja de todos los documentos incrustados coincidentes.

  • mean - Seleccione la puntuación promedio (media aritmética) de todos los documentos incrustados coincidentes. MongoDB Search solo incluye las puntuaciones de los documentos incrustados coincidentes al calcular el promedio. MongoDB Search no contabiliza los documentos incrustados que no cumplen los predicados de consulta como documentos con puntuaciones cero.

Si se omite, este campo se establece por defecto en sum.

outerScore

Opcional

Especifica la modificación de puntuación que se aplicará después de aplicar la estrategia de agregación.

La siguiente consulta de ejemplo utiliza un índice llamado default en la colección sample_analytics.transactions. El índice configura un tipo embeddedDocuments en los documentos del arreglo transactions y un tipo string para los campos transactions.symbol y transactions.transaction_code.

Ejemplo

Índice de muestra
{
"mappings": {
"dynamic": true,
"fields": {
"transactions": {
"dynamic": true,
"fields": {
"symbol": {
"type": "string"
},
"transaction_code": {
"type": "string"
}
},
"type": "embeddedDocuments"
}
}
}
}

La consulta de muestra en el campo transactions, que contiene una matriz de documentos, incluye una etapa $limit para limitar la salida a 10 resultados y una etapa $project para:

  • Exceptuar todos los campos excepto account_id y transaction_count.

  • Agrega un campo llamado score que aplique una estrategia de agregación y una mayor modificación de la puntuación.

    Nota

    Puede usar function dentro de la opción score del operator del operador embeddedDocument. Sin embargo, para las expresiones de score de función que requieren la opción path, el campo numérico que especifiques como path para la expresión debe encontrarse dentro del path del operador embeddedDocument. Por ejemplo, en la siguiente query de ejemplo, el campo transactions.amount que se especifica dentro de la opción score del operador compuesto en la línea 24 está dentro de la ruta del operador embeddedDocument transactions en la línea 4.

La query busca las cuentas que han comprado AMD y multiplica la mayor compra individual de AMD (por número de acciones) por el valor de log1p del número de transacciones que la cuenta ha realizado en este periodo. Clasifica las cuentas en función de lo siguiente:

  • Número de AMD comprados en una sola transacción

  • Número de transacciones en el último periodo

1db.transactions.aggregate({
2 "$search": {
3 "embeddedDocument": {
4 "path": "transactions",
5 "operator": {
6 "compound": {
7 "must": [
8 {
9 "text": {
10 "path": "transactions.symbol",
11 "query": "amd"
12 }
13 },
14 {
15 "text": {
16 "path": "transactions.transaction_code",
17 "query": "buy"
18 }
19 }
20 ],
21 "score": {
22 "function": {
23 "path": {
24 "value": "transactions.amount",
25 "undefined": 1.0
26 }
27 }
28 }
29 }
30 },
31 "score": {
32 "embedded": {
33 "aggregate": "maximum",
34 "outerScore": {
35 "function": {
36 "multiply": [
37 {
38 "log1p": {
39 "path": {
40 "value": "transaction_count"
41 }
42 }
43 },
44 {
45 "score": "relevance"
46 }
47 ]
48 }
49 }
50 }
51 }
52 }
53 }
54},
55{ "$limit": 10 },
56{
57 "$project": {
58 "_id": 0,
59 "account_id": 1,
60 "transaction_count": 1,
61 "score": { $meta: "searchScore" }
62 }
63})

MongoDB Search califica altamente las cuentas que han realizado muchas transacciones en el último periodo y han comprado muchas AMD en una sola transacción.

1[
2 { account_id: 467651, transaction_count: 99, score: 19982 },
3 { account_id: 271554, transaction_count: 96, score: 19851.822265625 },
4 { account_id: 71148, transaction_count: 99, score: 19840 },
5 { account_id: 408143, transaction_count: 100, score: 19836.76953125 },
6 { account_id: 977774, transaction_count: 98, score: 19822.64453125 },
7 { account_id: 187107, transaction_count: 96, score: 19754.470703125 },
8 { account_id: 492843, transaction_count: 97, score: 19744.998046875 },
9 { account_id: 373169, transaction_count: 93, score: 19553.697265625 },
10 { account_id: 249078, transaction_count: 89, score: 19436.896484375 },
11 { account_id: 77690, transaction_count: 90, score: 19418.017578125 }
12]

La opción function te permite alterar la puntuación final del documento usando un campo numérico. Puedes especificar el campo numérico para calcular el puntaje final a través de una expresión. Si el resultado final de la puntuación de la función es menor que 0, MongoDB Search reemplaza el puntaje por 0.

Nota

Puede usar function dentro de la opción score del operador embeddedDocument de operator. Sin embargo, para las expresiones de puntuación por función que requieren la opción path, el campo numérico que especifiques como path para la expresión debe estar dentro del path del operador embeddedDocument.

Utilice las siguientes expresiones con la opción function para alterar la puntuación final del documento:

  • Expresiones aritméticas, que suman o multiplican una serie de números.

  • Expresiones constantes, que permiten un número constante en la puntuación de la función.

  • Expresiones de decaimiento gaussiano, que decaen o reducen las puntuaciones multiplicando a una tasa especificada.

  • Expresiones de trayectoria, las cuales incorporan un valor numérico indexado de campo en una valoración de función.

  • Expresiones de puntuación, que devuelven la puntuación de relevancia asignada por la Búsqueda de MongoDB.

  • Expresiones unarias, que son expresiones que toman un único argumento. En MongoDB Search, puedes calcular el registro10(x) o registro10(x+1) de un número especificado.

Nota

Las puntuaciones de MongoDB Search función siempre son valores de float y se podría perder precisión para números muy grandes o pequeños.

Una expresión aritmética suma o multiplica una serie de números. Por ejemplo, se puede utilizar una expresión aritmética para modificar el ranking de relevancia a través de un campo numérico proveniente de una pipeline de enriquecimiento de datos. Debe incluir una de las siguientes opciones:

Opción
Tipo
Descripción

add

arreglo de expresiones

Añade una serie de números. Toma un arreglo de expresiones, que pueden tener valores negativos. La longitud del arreglo debe ser mayor o igual a 2. Por ejemplo:

Sintaxis de expresiones aritméticas
"function": {
"add": [
{"path": "rating"},
{"score": "relevance"}
]
}

En el ejemplo anterior, MongoDB Search utiliza las expresiones path y score para añadir lo siguiente:

  • Valor numérico del campo rating o 0, si el campo rating no está presente en el documento

  • Puntuación de relevancia, que es la puntuación que MongoDB Search asigna en función de la relevancia

multiply

arreglo de expresiones

Multiplica una serie de números. Toma un array de expresiones, que pueden tener valores negativos. La longitud del array debe ser mayor o igual 2 a. Por ejemplo:

Sintaxis de expresiones aritméticas
"function": {
"multiply": [
{
"path": {
"value": "popularity",
"undefined": 2.5
}
},
{
"score": "relevance"
},
{
"constant": 0.75
}
]
}

En el ejemplo anterior, MongoDB Search usa las expresiones path, score y constant para modificar la puntuación final del documento. Multiplica lo siguiente:

  • Valor numérico de la expresión de ruta, que es el valor numérico del campo popularity o 2.5, si el campo popularity no está presente en el documento

  • Puntuación de relevancia, que es la puntuación que MongoDB Search asigna en función de la relevancia

  • Valor constante de 0.75

Nota

No puedes reemplazar una expresión aritmética que evalúa como undefined por un valor constante.

Una expresión constante permite un número constante en la puntuación de la función. Por ejemplo, puede utilizar constant para modificar el ranking de relevancia mediante un valor numérico de un pipeline de enriquecimiento de datos. Debe incluir la siguiente opción:

Opción
Tipo
Descripción

constant

float

Número que indica un valor fijo. MongoDB Search admite valores negativos.

Ejemplo

Sintaxis de expresiones constantes
{
"function": {
"constant": -23.78
}
}

Una expresión de decaimiento gaussiano te permite decaer o reducir, multiplicando, las puntuaciones finales de los documentos en función de la distancia de un valor de campo numérico desde un punto de origen especificado. decay se calcula como:

Captura de pantalla de la computación de descomposición
haga clic para ampliar

donde sigma se calcula para asegurar que la puntuación tome el valor decay, a una distancia scale de origin±offset:

Captura de pantalla del cálculo de sigma
haga clic para ampliar

Por ejemplo, puede usar gauss para ajustar la puntuación relevante de los documentos según su actualidad o la fecha que influye en una clasificación más alta. gauss toma las siguientes opciones:

Campo
Tipo
Necesidad
Descripción

decay

doble

Opcional

Tasa a la que deseas multiplicar las puntuaciones. El valor debe ser un número positivo entre 0 y 1 exclusive. Si se omite, el valor por defecto será 0.5.

Para los documentos cuyo valor de campo numérico (especificado mediante path) está a una distancia (especificada mediante scale) de origin más o menos (±) offset, MongoDB Search multiplica el puntaje actual mediante decay.

offset

doble

Opcional

Número para usar para determinar la distancia desde el origen. La operación de decaimiento se realiza sólo para los documentos cuyas distancias son mayores que origin más o menos (±) offset. Si se omite, el valor por defecto será 0.

origin

doble

Requerido

Punto de origen desde el cual calcular la distancia.

path

Requerido

Nombre del campo numérico cuyo valor desea utilizar para multiplicar la puntuación base.

scale

doble

Requerido

Distancia desde origin más o menos (±) offset en la que se deben multiplicar las puntuaciones.

Ejemplo

Sintaxis de expresión gaussiana
{
"function": {
"gauss": {
"path": {
"value": "rating",
"undefined": 50
},
"origin": 95,
"scale": 5,
"offset": 5,
"decay": 0.5
}
}
}

Supongamos que la calificación máxima es 100. MongoDB Search utiliza el campo rating en los documentos para decaer la puntuación:

  • Mantiene la puntuación actual para los documentos con calificación entre 90 y 100.

  • Multiplica la puntuación actual por 0.5 para los documentos con una calificación inferior a 90.

  • Multiplica la puntuación actual por 0.25 para documentos con una puntuación inferior a 85, y así sucesivamente.

Una expresión de ruta incorpora un valor de campo numérico indexado en una puntuación de función. Puede ser string o object.

Si es string, el valor es el nombre del campo numérico donde se buscará la expresión de ruta.

Ejemplo

Sintaxis de expresiones de ruta
{
"function": {
"path": "rating"
}
}

MongoDB Search incorpora el valor numérico del campo rating en la puntuación final del documento.

Si object, la expresión de ruta toma las siguientes opciones:

Opción
Tipo
Necesidad
Descripción

value

string

Requerido

Nombre del campo numérico. El campo puede contener valores numéricos negativos.

undefined

float

Opcional

Valor a utilizar si falta en el documento el campo numérico especificado con value. Si se omite, por defecto será 0.

Ejemplo

Sintaxis de expresiones de ruta
{
"function": {
"path": {"value": "quantity", "undefined": 2}
}
}

MongoDB Search incorpora el valor numérico del campo quantity o 2, si el campo quantity no está presente en el documento, en la puntuación final del documento.

Una expresión de ruta no puede ser una array y no puede contener expresión regular ni comodín en el path.

Una expresión de puntuación representa la puntuación de relevancia de la consulta, que es la puntuación que MongoDB Search asigna a los documentos según su relevancia. Es igual a la puntuación actual del documento. Debe incluir la siguiente opción:

Opción
Tipo
Descripción

score

string

Valor de la puntuación de relevancia de la query. El valor debe ser relevance.

Ejemplo

Sintaxis de las expresiones de Score
{
"function": {
"score": "relevance"
}
}

Una expresión unaria es una expresión que toma un solo argumento. En MongoDB Search, puedes usar expresiones unarias para calcular el registro10(x) o registro10(x+1) de un número especificado. Por ejemplo, puedes utilizar log1p para influir en la puntuación de relevancia mediante la puntuación de popularidad del documento. Debe incluir una de las siguientes opciones:

Opción
Tipo
Descripción

log

Calcula el log10 de un número. Por ejemplo:

Sintaxis de expresión unaria
{
"function": {
"log": {
"multiply": [
{"path": "popularity"},
{"constant": 0.5},
{"score": "relevance"}
]
}
}
}

En el ejemplo anterior, MongoDB Search calcula el registro10 de la expresión aritmética que utiliza la opción multiply para calcular el producto del valor numérico del campo popularity, el valor constante de 0.5 y la puntuación de relevancia asignada por MongoDB Search.

Si la expresión especificada para la opción log se evalúa como menor o igual que 0, entonces log se evalúa como indefinido. Por ejemplo:

Sintaxis de expresión unaria
{
"function": {
"log": {
"constant": -5.1
}
}
}

En el ejemplo anterior, MongoDB Search evalúa el registro10 de la expresión constante -5.1 como indefinido. Por lo tanto, la puntuación final del documento es 0.

log1p

Suma 1 al número y luego calcula su logaritmo10. Por ejemplo:

Sintaxis de expresión unaria
{
"function": {
"log1p": {
"path": {
"value": "rating",
"undefined": 4
}
}
}
}

En el ejemplo anterior, MongoDB Search agrega 1 a la expresión que usa la opción path para evaluar el valor numérico del campo rating, y luego calcula el log10 de la suma resultante.

Los siguientes ejemplos utilizan el índice predeterminado de la colección sample_mflix.movies para consultar el campo title. Las consultas de ejemplo incluyen una etapa $limit para limitar la salida a 5 resultados y una etapa $project para excluir todos los campos excepto title y score.

Ejemplo

En este ejemplo, el operador de texto utiliza score con la opción function para multiplicar lo siguiente:

  • Valor numérico de la expresión de ruta, que es el valor del campo imdb.rating en los documentos o 2, si el campo imdb.rating no se encuentra en el documento

  • Puntuación de relevancia, o la puntuación actual del documento

db.movies.aggregate([{
"$search": {
"text": {
"path": "title",
"query": "men",
"score": {
"function":{
"multiply":[
{
"path": {
"value": "imdb.rating",
"undefined": 2
}
},
{
"score": "relevance"
}
]
}
}
}
}
},
{
$limit: 5
},
{
$project: {
"_id": 0,
"title": 1,
"score": { "$meta": "searchScore" }
}
}])

Esta query devuelve los siguientes resultados, en los que la puntuación es reemplazada por el valor function especificado:

{ "title" : "Men...", "score" : 23.431293487548828 }
{ "title" : "12 Angry Men", "score" : 22.080968856811523 }
{ "title" : "X-Men", "score" : 21.34803581237793 }
{ "title" : "X-Men", "score" : 21.34803581237793 }
{ "title" : "Matchstick Men", "score" : 21.05954933166504 }

Ejemplo

En el siguiente ejemplo, el operador texto usa score con la opción function para reemplazar la puntuación actual del documento con el valor numérico constante de 3.

db.movies.aggregate([
{
"$search": {
"text": {
"path": "title",
"query": "men",
"score": {
"function":{
"constant": 3
}
}
}
}
},
{
$limit: 5
},
{
$project: {
"_id": 0,
"title": 1,
"score": { "$meta": "searchScore" }
}
}
])

Esta query devuelve los siguientes resultados, en los que la puntuación es reemplazada por el valor function especificado:

{ "title" : "Men Without Women", "score" : 3 }
{ "title" : "One Hundred Men and a Girl", "score" : 3 }
{ "title" : "Of Mice and Men", "score" : 3 }
{ "title" : "All the King's Men", "score" : 3 }
{ "title" : "The Men", "score" : 3 }

Ejemplo

En el siguiente ejemplo, el operador texto utiliza score con la opción function para reducir la puntuación de relevancia de los documentos en el resultado.

La query especifica que para los documentos cuyo valor en el campo imdb.rating o 4.6, si el campo imdb.rating no está presente en los documentos, es scale de distancia, lo que es 5, de origin, que es 9.5, más o menos offset, que es 0, MongoDB Search debe multiplicar la puntuación usando decay, que comienza en 0.5. Esta consulta incluye una etapa $limit para limitar la salida a un máximo de 10 resultados y una etapa $project para agregar el campo imdb.rating en los resultados.

db.movies.aggregate([
{
"$search": {
"text": {
"path": "title",
"query": "shop",
"score": {
"function":{
"gauss": {
"path": {
"value": "imdb.rating",
"undefined": 4.6
},
"origin": 9.5,
"scale": 5,
"offset": 0,
"decay": 0.5
}
}
}
}
}
},
{
"$limit": 10
},
{
"$project": {
"_id": 0,
"title": 1,
"imdb.rating": 1,
"score": { "$meta": "searchScore" }
}
}
])

Esta query devuelve los siguientes resultados:

[
{ title: 'The Shop Around the Corner', imdb: { rating: 8.1 }, score: 0.9471074342727661 },
{ title: 'Exit Through the Gift Shop', imdb: { rating: 8.1 }, score: 0.9471074342727661 },
{ title: 'The Shop on Main Street', imdb: { rating: 8 }, score: 0.9395227432250977 },
{ imdb: { rating: 7.4 }, title: 'Chop Shop', score: 0.8849083781242371 },
{ title: 'Little Shop of Horrors', imdb: { rating: 6.9 }, score: 0.8290896415710449 },
{ title: 'The Suicide Shop', imdb: { rating: 6.1 }, score: 0.7257778644561768 },
{ imdb: { rating: 5.6 }, title: 'A Woman, a Gun and a Noodle Shop', score: 0.6559237241744995 },
{ title: 'Beauty Shop', imdb: { rating: 5.4 }, score: 0.6274620294570923 }
]

Para comparar los resultados de las expresiones gausianas utilizadas en la query anterior con la puntuación de relevancia que se retorna en los resultados de MongoDB Search, ejecutar la siguiente query:

db.movies.aggregate([
{
"$search": {
"text": {
"path": "title",
"query": "shop"
}
}
},
{
"$limit": 10
},
{
"$project": {
"_id": 0,
"title": 1,
"imdb.rating": 1,
"score": { "$meta": "searchScore" }
}
}
])

Esta query devuelve los siguientes resultados:

[
{ title: 'Beauty Shop', imdb: { rating: 5.4 }, score: 4.111973762512207 },
{ imdb: { rating: 7.4 }, title: 'Chop Shop', score: 4.111973762512207 },
{ title: 'The Suicide Shop', imdb: { rating: 6.1 }, score: 3.5363259315490723 },
{ title: 'Little Shop of Horrors', imdb: { rating: 6.9 }, score: 3.1020588874816895 },
{ title: 'The Shop Around the Corner', imdb: { rating: 8.1 }, score: 2.762784481048584 },
{ title: 'The Shop on Main Street', imdb: { rating: 8 }, score: 2.762784481048584 },
{ title: 'Exit Through the Gift Shop', imdb: { rating: 8.1 }, score: 2.762784481048584 },
{ imdb: { rating: 5.6 }, title: 'A Woman, a Gun and a Noodle Shop', score: 2.0802340507507324 }
]

Ejemplo

En el siguiente ejemplo, el operador de texto utiliza score con la function opción para reemplazar el puntaje de relevancia de la consulta con el valor del campo numérico imdb.rating o,4.6 si el imdb.rating campo no está presente en los documentos.

db.movies.aggregate([{
"$search": {
"text": {
"path": "title",
"query": "men",
"score": {
"function":{
"path": {
"value": "imdb.rating",
"undefined": 4.6
}
}
}
}
}
},
{
$limit: 5
},
{
$project: {
"_id": 0,
"title": 1,
"score": { "$meta": "searchScore" }
}
}])

Esta query devuelve los siguientes resultados, en los que la puntuación es reemplazada por el valor function especificado:

{ "title" : "12 Angry Men", "score" : 8.899999618530273 }
{ "title" : "The Men Who Built America", "score" : 8.600000381469727 }
{ "title" : "No Country for Old Men", "score" : 8.100000381469727 }
{ "title" : "X-Men: Days of Future Past", "score" : 8.100000381469727 }
{ "title" : "The Best of Men", "score" : 8.100000381469727 }

Ejemplo

En el siguiente ejemplo, el operador text utiliza score con la opción function para devolver la puntuación de relevancia, que es la misma que la puntuación actual, de los documentos.

db.movies.aggregate([{
"$search": {
"text": {
"path": "title",
"query": "men",
"score": {
"function":{
"score": "relevance"
}
}
}
}
},
{
"$limit": 5
},
{
"$project": {
"_id": 0,
"title": 1,
"score": { "$meta": "searchScore" }
}
}])

Esta query devuelve los siguientes resultados, en los que la puntuación es reemplazada por el valor function especificado:

{ "title" : "Men...", "score" : 3.4457783699035645 }
{ "title" : "The Men", "score" : 2.8848698139190674 }
{ "title" : "Simple Men", "score" : 2.8848698139190674 }
{ "title" : "X-Men", "score" : 2.8848698139190674 }
{ "title" : "Mystery Men", "score" : 2.8848698139190674 }

Ejemplo

En el siguiente ejemplo, el operador de texto utiliza score con la function opción para calcular el logaritmo10 del imdb.rating campo o,10 si el imdb.rating campo no está presente en el documento.

db.movies.aggregate([{
"$search": {
"text": {
"path": "title",
"query": "men",
"score": {
"function": {
"log": {
"path": {
"value": "imdb.rating",
"undefined": 10
}
}
}
}
}
}
},
{
"$limit": 5
},
{
"$project": {
"_id": 0,
"title": 1,
"score": { "$meta": "searchScore" }
}
}])

Esta query devuelve los siguientes resultados, en los que la puntuación es reemplazada por el valor function especificado:

{ "title" : "12 Angry Men", "score" : 0.9493899941444397 }
{ "title" : "The Men Who Built America", "score" : 0.9344984292984009 }
{ "title" : "No Country for Old Men", "score" : 0.9084849953651428 }
{ "title" : "X-Men: Days of Future Past", "score" : 0.9084849953651428 }
{ "title" : "The Best of Men", "score" : 0.9084849953651428
}

Volver

score

En esta página