No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Puntaje

7/16
Recursos

¿Cómo se calcula el puntaje en Elasticsearch?

El puntaje en Elasticsearch es un concepto clave que determina qué tan bien coincide un documento almacenado en un índice con la búsqueda que has realizado. Este puntaje es representado por un número, y entre más alto sea este número, mayor es la relevancia del documento con respecto a la búsqueda. Este proceso se utiliza para ordenar los documentos en función de su pertinencia.

¿Cómo funciona el algoritmo de puntuación?

El algoritmo de Elasticsearch verifica dos aspectos principales:

  • Número de ocurrencias del texto: Este factor examina cuántas veces aparece el término de búsqueda en los documentos.

  • Unicidad de las palabras: Evalúa qué tan única es una palabra en el contenido de los documentos dentro de un índice completo.

Por defecto, los documentos se ordenan utilizando este puntaje en las búsquedas realizadas, mostrando los documentos más relevantes en la parte superior de los resultados.

Ejemplo práctico: Uso de Postman con Elasticsearch

Para entender cómo se evalúa el puntaje en ElasticSearch, crearemos un conjunto de documentos de ejemplo.

¿Cómo agregar un documento en Elasticsearch?

Usaremos Postman para agregar un documento al índice de ejemplo. Creamos un nuevo plato:

PUT /platos/_doc/3
{
  "nombre": "Nachos XL",
  "descripcion": "Nachos con carne, guacamole, pico de gallo, salsa picante y queso.",
  "estado": "activo",
  "pedidos_ultima_hora": 11,
  "ultima_modificacion": "2020-03-01",
  "modificado_por": "[email protected]"
}

El documento con ID = 3, denominado "Nachos XL", es agregado, y estamos listos para realizar una búsqueda con puntajes.

¿Cómo realizar búsquedas y evaluar el puntaje?

  1. Búsqueda básica: Realizaremos una búsqueda sencilla con la cadena "nachos con queso":
GET /platos/_search
{
  "query": {
    "simple_query_string": {
      "query": "nachos con queso"
    }
  }
}

Resultado: Se devuelven dos documentos, "Nachos XL" y "La Ensanadísima". "Nachos XL" tiene un puntaje más alto (3.014) al contener más coincidencias de las palabras clave.

  1. Búsqueda alternativa: Cambiamos la búsqueda a "bowl de pollo saludable":
GET /platos/_search
{
  "query": {
    "simple_query_string": {
      "query": "bowl de pollo saludable"
    }
  }
}

Resultado: Se devuelven "Bowl picante" y "La Ensanadísima", con puntajes más cercanos, reflejando una mayor proximidad en los términos buscados.

Ajuste de pesos en las búsquedas

Elasticsearch permite ajustar el peso de ciertos campos para influir en la relevancia de los resultados.

¿Cómo ajustar los pesos de los campos en una búsqueda?

Podemos asignar un peso mayor al campo de nombre:

GET /platos/_search
{
  "query": {
    "simple_query_string": {
      "query": "guacamole picante",
      "fields": ["nombre^2", "descripcion"]
    }
  }
}

Al asignar un peso mayor al campo "nombre", cambiamos la relevancia relativa de los documentos. Ahora "Bowl picante" puede obtener un puntaje más alto en contraste con una búsqueda inversa donde se le da más peso al "descripcion".

Implicaciones de ajustes en el puntaje

Al cambiar los pesos, observamos cómo el nombre impacta significativamente el resultado y cómo Elasticsearch permite moldear la relevancia en función de las necesidades de búsqueda específicas.

Cada ajuste puede modificar qué documento se considera más relevante, lo que demuestra la flexibilidad y el poder de Elasticsearch para personalizar los resultados de búsqueda. ¡Sigue explorando y experimentando con ElasticSearch para convertirte en un experto en gestión de búsquedas eficientes y efectivas!

Aportes 13

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

  • El puntaje es el valor de coincidencia de un valor de búsqueda con los documentos almacenados en un índice de elaticsearch.

  • Mientras más valor de puntaje se tenga, más relevante es el documento.

  • El algoritmo verifica el # ocurrencias / unicidad de las palabras.

  • Las búsquedas son ordenadas por puntaje o relevancia del documento.

  • Para las búsquedas usamos GET /_search y "simple_query_string"

  • si se quiere buscar en ciertos atributos se agrega "fields", para agregar más peso sobre el campo se ^ + el valor del peso.

Soy el único al que le dió hambre escuchando estos platos? jaja Ya regreso, iré a comprarme algo.

Todos los “motores” estan basados en Apache Lucene, genial !

Cambie los pesos, pero no mostró el registro de Nachos como el mas relevante con base en su score

¿Alguien sabe por qué?

{
    "query": {
        "simple_query_string": 
        {"query": "guacamole picante",
         "fields": ["descripion^2","nombre"]
        
        }
    }
}


{
    "took": 16,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 1.6707861,
        "hits": [
            {
                "_index": "platos",
                "_type": "_doc",
                "_id": "1",
                "_score": 1.6707861,
                "_source": {
                    "nombre": "Bowl Picante",
                    "descripion": "Pollo, Salsa picante, frijoles, platano y aguacate",
                    "estado": "activo",
                    "pedidosUltimaHora": 42,
                    "ultimaModificacion": {
                        "usuario": "[email protected]",
                        "fecha": "2020-02-19"
                    }
                }
            },
            {
                "_index": "platos",
                "_type": "_doc",
                "_id": "3",
                "_score": 1.1507283,
                "_source": {
                    "nombre": "Nachos XL",
                    "descripion": "Nachos con carne, guacamole, pico de gallo, salsa picante y queso",
                    "estado": "activo",
                    "pedidosUltimaHora": 11,
                    "ultimaModificacion": {
                        "usuario": "[email protected]",
                        "fecha": "2020-03-01"
                    }
                }
            }
        ]
    }
}

muy interesante este concepto del puntaje, buena explicación.

como hace para enviar el json en el body cuando hace una peticion HTTP GET?

Busqueda con base en el puntaje y edicion de variable

busqueda con mayor puntaje

Busqueda con un termino de referencia: _search

Los pesos sobre los puntajes es como una especie de multiplicacion sobre el puntaje final.

Excelente!!

¡Cómo le haces para buscar sin acento? En este caso ensaladisima, y que te traiga resultados. Si escribo “Ensaladísima” con acento, si me trae datos

👍👍👍👍