Búsqueda elástica: ponderación basada en un atributo

Aug 21 2020

¿Hay alguna forma en Elastic Search de ponderar los resultados en función de un atributo que no sea el utilizado para la consulta de búsqueda? Por ejemplo, buscamos el campo 'nombre', pero todos los documentos que tienen 'con_imágenes' atribuido a verdadero tienen una mayor ponderación.

Respuestas

2 ESCoder Aug 21 2020 at 09:08

Puede usar impulsar en campos individuales, que se impulsarán automáticamente (cuentan más para el puntaje de relevancia) en el momento de la consulta, con el parámetro de impulso

Agregar un ejemplo de trabajo con datos de índice, mapeo y consulta de búsqueda

Mapeo de índice:

{
  "mappings": {
    "properties": {
      "with_pictures": {
        "type": "boolean",
        "boost": 2 
      },
      "name": {
        "type": "keyword"
      }
    }
  }
}

Datos del índice:

{
    "name": "A",
    "with_pictures": false
}

{
    "name": "A",
    "with_pictures": true
}
{
    "name": "B",
    "with_pictures": true
}

Consulta de busqueda:

{
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
        {
          "bool": {
            "should": [

              {
                "term": {
                  "name": "A"
                }
              },
              {
                "term": {
                  "with_pictures": true
                }
              }
            ]
          }
        }
      ]
    }
  }
}

Resultado de búsqueda:

 "hits": [
      {
        "_index": "fd_cb1",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.4100108,
        "_source": {
          "name": "A",
          "with_pictures": true
        }
      },
      {
        "_index": "fd_cb1",
        "_type": "_doc",
        "_id": "3",
        "_score": 0.9400072,
        "_source": {
          "name": "B",
          "with_pictures": true
        }
      },
      {
        "_index": "fd_cb1",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.4700036,
        "_source": {
          "name": "A",
          "with_pictures": false
        }
      }
    ]

Puntuación de los documentos que cumplen las condiciones de namey with_propertiestienen la puntuación más alta. Pero el documento que tiene name: By with_pictures: truetiene una puntuación más alta que name: Ay with_pictures: false(debido al impulso aplicado en elwith_pictures

También puede consultar la función de consulta de puntuación que le permite modificar la puntuación de los documentos que se recuperan mediante una consulta.