Ricerca elastica: base di ponderazione su un attributo

Aug 21 2020

Esiste un modo in Elastic Search per ponderare i risultati in base a un attributo diverso da quello utilizzato per la query di ricerca. Ad esempio, cerchiamo nel campo 'nome', ma tutti i documenti che hanno 'con_immagini' attribuito a true pesano più in alto.

Risposte

2 ESCoder Aug 21 2020 at 09:08

Puoi utilizzare boost su singoli campi, che verranno potenziati automaticamente (conta di più per il punteggio di pertinenza) al momento della query, con il parametro boost

Aggiunta di un esempio funzionante con dati di indice, mappatura e query di ricerca

Mappatura dell'indice:

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

Dati indice:

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

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

Query di ricerca:

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

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

Risultato della ricerca:

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

Punteggio di documenti che soddisfano entrambe le condizioni namee with_propertiesha il punteggio più alto. Ma il documento che ha name: Be with_pictures: trueha un punteggio più alto di name: Ae with_pictures: false(a causa della spinta applicata al filewith_pictures

È inoltre possibile fare riferimento alla query del punteggio della funzione che consente di modificare il punteggio dei documenti recuperati da una query.