Mi información de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
En Elasticsearch, el mecanismo de puntuación predeterminado (como el algoritmo BM25) puede proporcionar una buena clasificación de los resultados de búsqueda en la mayoría de los casos. Sin embargo, en algunos escenarios específicos, es posible que necesitemos realizar una clasificación más refinada de los resultados de búsqueda según las necesidades comerciales. En este momento, Elasticsearch proporciona funciones de puntuación personalizada (Consulta de puntuación de función) y puntuación de script (Puntuación de script) para satisfacer estas necesidades complejas. Este artículo detallará cómo personalizar la puntuación y la puntuación de scripts en Elasticsearch.
La puntuación personalizada nos permite modificar la puntuación predeterminada para cada documento en función de un conjunto de funciones predefinidas. Estas funciones pueden calcular nuevas calificaciones en función de los valores de los campos del documento, los criterios de consulta u otros factores. En última instancia, Elasticsearch combinará la puntuación original con la puntuación personalizada para determinar la clasificación de los resultados de búsqueda.
Elasticsearch proporciona una variedad de funciones integradas para puntuación personalizada, que incluyen, entre otras:
Supongamos que tenemos un sitio web de comercio electrónico y los usuarios quieren considerar tanto el precio del producto como las calificaciones al buscar productos.nosotros podemos usarfunction_score
Consulta para cumplir este requisito:
GET /products/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "手机"
}
},
"functions": [
{
"field_value_factor": {
"field": "price",
"modifier": "reciprocal",
"params": {
"scale": 100
}
}
},
{
"field_value_factor": {
"field": "rating",
"missing": 1.0
}
}
],
"score_mode": "sum",
"boost_mode": "replace"
}
}
}
En este ejemplo utilizamosfield_value_factor
La función calcula una calificación personalizada basada en el precio y la calificación del artículo. Los precios utilizan una caída recíproca (reciprocal
), de modo que el producto con un precio más bajo tenga una puntuación más alta; la puntuación utiliza el valor del campo directamente. Finalmente, sumamos las calificaciones de ambas funciones y reemplazamos las calificaciones originales.
La puntuación de secuencias de comandos nos permite utilizar un lenguaje de secuencias de comandos personalizado (como Painless) para calcular la puntuación de un documento. Este enfoque proporciona la mayor flexibilidad y puede calcular puntuaciones basándose en casi cualquier lógica.
Supongamos que queremos ajustar la calificación en función de la cantidad de inventario del producto. Los productos con menos inventario tendrán calificaciones más altas.nosotros podemos usarscript_score
función para lograr este requisito:
GET /products/_search
{
"query": {
"function_score": {
"query": {
"match": {
"name": "手机"
}
},
"functions": [
{
"script_score": {
"script": {
"source": "Math.max(0, 1 - doc['stock'].value / 100.0)",
"lang": "painless"
}
}
}
],
"score_mode": "multiply",
"boost_mode": "replace"
}
}
}
En este ejemplo, utilizamos el lenguaje de programación Painless para calcular la calificación. El script determina la cantidad de inventario del producto (doc['stock'].value
) calcula una puntuación. Cuanto mayor es la cantidad del inventario, menor es la puntuación; cuanto menor es la cantidad del inventario, mayor es la puntuación. Luego multiplicamos esta puntuación por la calificación original para ajustar la clasificación final de los resultados de búsqueda.
La puntuación personalizada y la puntuación de script son funciones potentes proporcionadas por Elasticsearch, que nos permiten refinar los resultados de búsqueda según las necesidades comerciales. Al utilizar racionalmente estas funciones, podemos mejorar la experiencia del usuario y satisfacer las diversas necesidades de los usuarios. Sin embargo, cabe señalar que la puntuación personalizada y la puntuación de scripts pueden aumentar la complejidad de las consultas y el costo computacional, por lo que los pros y los contras deben sopesarse en aplicaciones prácticas y usarse con precaución.