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:
boost
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
boostyconstantjuntas.La
boostopción conpathes lo mismo que multiplicar usando la opción confunctionuna expresión de ruta.
Campos
La opción boost toma los siguientes campos:
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| float | Condicional | Número por el que se multiplicará la puntuación base predeterminada. El valor debe ser positivo. Se requiere |
| string | Condicional | Nombre del campo numérico por cuyo valor se multiplicará la puntuación base predeterminada. Se requiere |
| float | Opcional | Valor numérico que sustituye a |
Ejemplos
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.
1 db.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.
1 db.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 } ]
constant
La opción constant reemplaza la puntuación base con un número especificado.
Nota
No debe utilizar las opciones constant y boost juntas.
Ejemplos
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.
1 db.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 ]
embedded
Nota
Puede utilizar esta opción únicamente con el operador embeddedDocument.
La opción embedded le permite configurar cómo:
Agregue las puntuaciones de múltiples documentos incrustados coincidentes.
Modifique la puntuación de un operador embeddedDocument después de agregar las puntuaciones de los documentos incrustados coincidentes.
Nota
El tipo embeddedDocuments de búsqueda de MongoDB, el operadorembeddedDocument embedded y la opción de puntuación están en vista previa.
Campos
La opción embedded toma los siguientes campos:
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| string | Opcional | Configura cómo combinar los puntajes de documentos incrustados coincidentes. El valor debe ser una de las siguientes estrategias de agregación:
Si se omite, este campo tendrá como valor predeterminado |
| Opcional | Especifica la modificación de puntuación que se aplicará después de aplicar la estrategia de agregación. |
Ejemplos
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
{ "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_idytransaction_count.Agregue un campo llamado
scoreque aplique una estrategia de agregación y modificaciones adicionales de puntuación.Nota
Puede usar
functiondentroscorede la opción del operador del embeddedDocument.operatorSin embargo, para las expresiones de puntuación de función que requieren lapathopción, el campo numérico que especifique comopathpara la expresión debe estar dentro del delpathembeddedDocument. Por ejemplo, en la siguiente consulta de ejemplo, el campotransactions.amountespecificado dentroscorede la opción del operador compuesto en la línea 24 se encuentra dentro de laembeddedDocumentruta del operadortransactionsen 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
AMDcomprados en una sola transacciónNúmero de transacciones en el último período
1 db.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 ]
function
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.
Expresiones
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 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 Sintaxis de expresiones aritméticas En el ejemplo anterior, MongoDB Search utiliza las expresiones
| ||||||||||||||||
| 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 Sintaxis de expresiones aritméticas En el ejemplo anterior, MongoDB Search usa las expresiones
|
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 |
|---|---|---|
| float | Número que indica un valor fijo. MongoDB Search admite valores negativos. |
Ejemplo
{ "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:

donde se calcula sigma para asegurar que la puntuación tome el valor decay a una distancia scale de origin±offset:
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 |
|---|---|---|---|
| doble | Opcional | Tasa a la que desea multiplicar las puntuaciones. El valor debe ser un número positivo entre Para los documentos cuyo valor de campo numérico (especificado mediante |
| 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 |
| doble | Requerido | Punto de origen desde el cual calcular la distancia. |
| Requerido | Nombre del campo numérico cuyo valor desea utilizar para multiplicar la puntuación base. | |
| doble | Requerido | Distancia desde |
Ejemplo
{ "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
90y100.Multiplica la puntuación actual por
0.5para los documentos con una calificación inferior a90.Multiplica la puntuación actual por
0.25para los documentos con una calificación inferior a85, 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
{ "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 |
|---|---|---|---|
| string | Requerido | Nombre del campo numérico. El campo puede contener valores numéricos negativos. |
| float | Opcional | Valor que se utiliza si el campo numérico especificado con |
Ejemplo
{ "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 |
|---|---|---|
| string | Valor de la puntuación de relevancia de la consulta. El valor debe ser |
Ejemplo
{ "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 | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Calcula el logaritmo10 de un número. Por ejemplo: Sintaxis de expresiones unarias En el ejemplo anterior, MongoDB Search calcula el logaritmo10 de la expresión aritmética que utiliza la opción Si la expresión especificada para la opción Sintaxis de expresión unaria En el ejemplo anterior, MongoDB Search evalúa el logaritmo10 de la expresión constante | |||||||||||||||||||
| Suma Sintaxis de expresiones unarias En el ejemplo anterior, MongoDB Search agrega |
Ejemplos
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.ratingen los documentos o2, si el campoimdb.ratingno está en el documentoPuntuació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 }