Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

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 dado o por el valor de un campo numérico en los documentos. Por ejemplo, se puede utilizar 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 lo mismo 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 el conjunto de datos de muestra en el clúster, puedes crear el índice de MongoDB Search default y ejecutar las consultas de ejemplo en el 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
}
]

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.

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 - Elije la puntuación más alta de todos los documentos incrustados coincidentes.

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

  • mean - Elige la puntuación promedio (media aritmética) de todos los documentos incrustados coincidentes. MongoDB Search incluye las puntuaciones de los documentos incrustados coincidentes solo al calcular el promedio. MongoDB Search no cuenta los documentos incrustados que no cumplen con los predicados de query como documentos con una puntuación de 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 query de muestra en el campo transactions, que contiene un arreglo 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

    Puedes utilizar function dentro de la opción score del operator del operador embeddedDocument. Sin embargo, para las expresiones de function score que requieren la opción path, el campo numérico que especificas como path para la expresión debe estar dentro de la 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 transactions del operador embeddedDocument 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 le permite modificar la puntuación final del documento utilizando un campo numérico. Puede especificar el campo numérico para calcular la puntuación final a través de una expresión. Si el resultado final de la puntuación de la función es inferior a 0, MongoDB Search reemplaza la puntuación con 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.

Utiliza 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

Suma una serie de números. Toma un arreglo de expresiones, que puede tener valores negativos. La longitud del arreglo debe ser mayor o igual que 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 arreglo de expresiones, que puede tener valores negativos. La longitud del arreglo debe ser mayor o igual que 2. 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 utiliza las expresiones path, score y constant para alterar 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.

En los ejemplos siguientes se utiliza el índice por defecto en la colección sample_mflix.movies para consultar el campo title. Las consultas de muestra 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 }