Elastic Search - base de ponderação em um atributo

Aug 21 2020

Existe uma maneira no Elastic Search de ponderar os resultados com base em um atributo diferente daquele usado para a consulta de pesquisa. Por exemplo, pesquisamos o campo 'nome', mas todos os documentos que têm 'with_pictures' atribuídos a true têm peso maior.

Respostas

2 ESCoder Aug 21 2020 at 09:08

Você pode usar boost em campos individuais, que serão aumentados automaticamente — contam mais para a pontuação de relevância — no momento da consulta, com o parâmetro boost

Adicionando exemplo de trabalho com dados de índice, mapeamento e consulta de pesquisa

Mapeamento de índice:

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

Dados do índice:

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

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

Consulta de pesquisa:

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

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

Resultado da pesquisa:

 "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
        }
      }
    ]

Pontuação de documentos que satisfazem as condições de namee with_propertiesestá tendo a pontuação mais alta. Mas o documento tendo name: Be with_pictures: truetem pontuação maior que name: Ae with_pictures: false(por causa do aumento aplicado nowith_pictures

Você também pode consultar a consulta de pontuação da função que permite modificar a pontuação dos documentos recuperados por uma consulta.