Docs Menu
Docs Home
/ /

Modificar la puntuación

Las siguientes opciones de modificación de puntuación están disponibles para todos los operadores. Para obtener más información y ejemplos, haga 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 utilizar las opciones boost y constant juntas.

  • La boost opción con path es lo mismo que multiplicar usando la opción con function 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 que se multiplicará la puntuación base predeterminada. El valor debe ser positivo. Se requiere value o path, pero no se pueden especificar ambos.

path

string

Condicional

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

undefined

float

Opcional

Valor numérico que sustituye a path si el campo numérico especificado mediante path no se encuentra en los documentos. Si se omite, el valor predeterminado es 0. Solo se puede especificar si se especifica path.

Los siguientes ejemplos utilizan la colección movies en la base de datos sample_mflix. Si tiene 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 consultas compuestas de ejemplo muestran cómo aumentar la importancia de un criterio de búsqueda sobre otro. Las consultas incluyen una $project etapa 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 plot title campos y. La consulta del title campo utiliza score con la boost opción para multiplicar los resultados de la puntuación 3 por, como se especifica en el value campo.

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 consulta devuelve los siguientes resultados, en los que la puntuación de los documentos donde title coincide con el término de consulta se multiplica por 3 a partir de 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 plot title campos y. La consulta en el title campo utiliza score con la boost opción para multiplicar los resultados de la puntuación por el campo numérico imdb.rating pathen. Si el campo numérico no se encuentra en el campo path especificado, el operador multiplica la puntuación de los documentos 3 por.

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 debe utilizar 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 consulta contra el campo title únicamente 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

Puede utilizar esta opción únicamente con el operador embeddedDocument.

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

Nota

El tipo embeddedDocuments de búsqueda de MongoDB, el operadorembeddedDocument embedded y la opción de puntuación 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 - (Predeterminado) Suma la puntuación de todos los documentos incrustados coincidentes.

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

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

  • 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 tendrá como valor predeterminado 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 para los documentos de la matriz 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:

  • Excluir todos los campos excepto account_id y transaction_count.

  • Agregue un campo llamado score que aplique una estrategia de agregación y modificaciones adicionales de puntuación.

    Nota

    Puede usar function dentro score de la opción del operador del embeddedDocument. operator Sin embargo, para las expresiones de puntuación de función que requieren la path opción, el campo numérico que especifique como path para la expresión debe estar dentro del del path embeddedDocument. Por ejemplo, en la siguiente consulta de ejemplo, el campo transactions.amount especificado dentro score de la opción del operador compuesto en la línea 24 se encuentra dentro de la embeddedDocument ruta del operador transactions en la 4 línea.

La consulta busca cuentas que hayan comprado AMD y multiplica la mayor compra individual AMD (por número de acciones) por el valor log1p del número de transacciones realizadas por la cuenta en este período. Clasifica las cuentas según lo siguiente:

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

  • Número de transacciones en el último período

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 clasifica altamente las cuentas que han realizado muchas transacciones en el último período y han comprado muchos 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 score de la opción del operador embeddedDocument. operatorSin embargo, para las expresiones de puntuación de función que requieren la path opción, el campo numérico que especifique como path para la expresión debe estar dentro del operador path 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 desintegración gaussiana, que desintegran o reducen las puntuaciones multiplicándolas a una tasa específica.

  • 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 MongoDB Search.

  • Expresiones unarias, que son expresiones que aceptan un solo argumento. En MongoDB Search, se puede calcular el logaritmo10(x) o el logaritmo10(x+1) de un número específico.

Nota

Los puntajes de la función de búsqueda de MongoDB siempre son valores float y la precisión puede perderse con 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

matriz 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

matriz 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 se puede reemplazar una expresión aritmética que evalúa undefined con un valor constante.

Una expresión constante permite un número constante en la puntuación de la función. Por ejemplo, puede usar constant para modificar la clasificación de relevancia mediante un valor numérico de una canalización 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 del cálculo de la desintegración
haga clic para ampliar

donde se calcula sigma 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 desea multiplicar las puntuaciones. El valor debe ser un número positivo entre 0 y 1 (excluyendo). Si se omite, el valor predeterminado es 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 que se utiliza para determinar la distancia desde el origen. La operación de decaimiento solo se realiza en documentos cuyas distancias son mayores que origin más o menos (±) offset. Si se omite, el valor predeterminado es 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 expresiones gaussianas
{
"function": {
"gauss": {
"path": {
"value": "rating",
"undefined": 50
},
"origin": 95,
"scale": 5,
"offset": 5,
"decay": 0.5
}
}
}

Supongamos que la puntuación máxima es 100. MongoDB Search utiliza el campo rating en los documentos para descomponer 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 los documentos con una calificación inferior a 85, y así sucesivamente.

Una expresión de ruta incorpora un valor de campo numérico indexado en la puntuación de una 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 expresión 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 que se utiliza si el campo numérico especificado con value no está presente en el documento. Si se omite, el valor predeterminado es 0.

Ejemplo

Sintaxis de expresión 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 un array y no puede contener expresiones regulares ni caracteres comodín en path el.

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 consulta. El valor debe ser relevance.

Ejemplo

Sintaxis de expresión de puntuación
{
"function": {
"score": "relevance"
}
}

Una expresión unaria es una expresión que toma un solo argumento. En MongoDB Search, puede usar expresiones unarias para calcular el logaritmo10(x) o el logaritmo10(x+1) de un número específico. Por ejemplo, puede usar 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 logaritmo10 de un número. Por ejemplo:

Sintaxis de expresiones unarias
{
"function": {
"log": {
"multiply": [
{"path": "popularity"},
{"constant": 0.5},
{"score": "relevance"}
]
}
}
}

En el ejemplo anterior, MongoDB Search calcula el logaritmo10 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 el puntaje de relevancia asignado 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 logaritmo10 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 expresiones unarias
{
"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 logaritmo10 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 function opción 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 está 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 consulta devuelve los siguientes resultados, en los que la puntuación se reemplaza con 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 de texto utiliza score con la function opción para reemplazar la puntuación actual del documento con el valor numérico constante 3 de.

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

Esta consulta devuelve los siguientes resultados, en los que la puntuación se reemplaza con 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 de texto utiliza score con la function opción para reducir la puntuación de relevancia de los documentos en el resultado.

La consulta especifica que, para los documentos cuyo imdb.rating valor de campo 4.6 o, si el imdb.rating campo no está presente en los documentos, se scale encuentra 5 a (es decir,) origin de (es 9.5 decir,), más o menos offset (es 0 decir,), MongoDB Search debe multiplicar la puntuación decay por, que comienza 0.5 en. Esta consulta incluye una $limit etapa para limitar la salida a un máximo de 10 resultados y una etapa para añadir $project el imdb.rating campo a 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 consulta 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 consulta 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 consulta devuelve los siguientes resultados, en los que la puntuación se reemplaza con 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 de texto utiliza score con la function opción 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 consulta devuelve los siguientes resultados, en los que la puntuación se reemplaza con 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 consulta devuelve los siguientes resultados, en los que la puntuación se reemplaza con 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