En aquest tema, aprendrem com utilitzar les capacitats de filtratge i ordenació d'Elasticsearch per refinar les cerques i obtenir resultats més rellevants. Aquestes tècniques són essencials per treballar amb grans volums de dades i assegurar-se que els resultats de les cerques siguin precisos i útils.

  1. Introducció al Filtratge

El filtratge en Elasticsearch permet restringir els resultats de la cerca a documents que compleixin certs criteris. A diferència de les cerques de text complet, els filtres no calculen la rellevància dels documents, sinó que simplement inclouen o exclouen documents basats en les condicions especificades.

Tipus de Filtres

Els filtres més comuns en Elasticsearch inclouen:

  • Term Filter: Filtra documents que contenen un valor exacte en un camp.
  • Range Filter: Filtra documents que tenen valors dins d'un rang específic.
  • Exists Filter: Filtra documents que tenen un camp específic.
  • Bool Filter: Combina múltiples filtres utilitzant operadors lògics (AND, OR, NOT).

Exemple de Filtratge

A continuació, es mostra un exemple de com utilitzar un filtre de terme i un filtre de rang en una cerca:

GET /index_name/_search
{
  "query": {
    "bool": {
      "filter": [
        { "term": { "status": "active" } },
        { "range": { "age": { "gte": 30, "lte": 40 } } }
      ]
    }
  }
}

En aquest exemple:

  • El filtre de terme selecciona documents on el camp status és active.
  • El filtre de rang selecciona documents on el camp age està entre 30 i 40 anys (inclosos).

  1. Introducció a l'Ordenació

L'ordenació en Elasticsearch permet especificar l'ordre en què es retornen els resultats de la cerca. Per defecte, els resultats es retornen basats en la rellevància, però es poden ordenar per qualsevol camp.

Tipus d'Ordenació

Els tipus d'ordenació més comuns inclouen:

  • Ordenació per Camp: Ordena els resultats basats en el valor d'un camp específic.
  • Ordenació per Puntuació: Ordena els resultats basats en la puntuació de rellevància (per defecte).
  • Ordenació per Múltiples Camps: Ordena els resultats basats en múltiples camps, en ordre de prioritat.

Exemple d'Ordenació

A continuació, es mostra un exemple de com ordenar els resultats per un camp específic:

GET /index_name/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    { "age": { "order": "asc" } },
    { "name": { "order": "desc" } }
  ]
}

En aquest exemple:

  • Els resultats es retornen ordenats primer pel camp age en ordre ascendent.
  • Si hi ha documents amb el mateix valor d'age, es retornen ordenats pel camp name en ordre descendent.

  1. Combinació de Filtratge i Ordenació

És comú combinar filtratge i ordenació en una sola consulta per obtenir resultats precisos i ordenats. A continuació, es mostra un exemple de com fer-ho:

GET /index_name/_search
{
  "query": {
    "bool": {
      "filter": [
        { "term": { "status": "active" } },
        { "range": { "age": { "gte": 30, "lte": 40 } } }
      ]
    }
  },
  "sort": [
    { "age": { "order": "asc" } }
  ]
}

En aquest exemple:

  • Els resultats es filtren per documents on status és active i age està entre 30 i 40 anys.
  • Els resultats filtrats es retornen ordenats pel camp age en ordre ascendent.

  1. Exercicis Pràctics

Exercici 1: Filtratge per Termes

Crea una consulta que filtri els documents on el camp category sigui electronics.

Solució:

GET /index_name/_search
{
  "query": {
    "bool": {
      "filter": [
        { "term": { "category": "electronics" } }
      ]
    }
  }
}

Exercici 2: Filtratge per Rang

Crea una consulta que filtri els documents on el camp price estigui entre 100 i 200.

Solució:

GET /index_name/_search
{
  "query": {
    "bool": {
      "filter": [
        { "range": { "price": { "gte": 100, "lte": 200 } } }
      ]
    }
  }
}

Exercici 3: Ordenació per Camp

Crea una consulta que ordeni els resultats pel camp rating en ordre descendent.

Solució:

GET /index_name/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    { "rating": { "order": "desc" } }
  ]
}

Exercici 4: Combinació de Filtratge i Ordenació

Crea una consulta que filtri els documents on el camp status sigui available i ordeni els resultats pel camp price en ordre ascendent.

Solució:

GET /index_name/_search
{
  "query": {
    "bool": {
      "filter": [
        { "term": { "status": "available" } }
      ]
    }
  },
  "sort": [
    { "price": { "order": "asc" } }
  ]
}

  1. Errors Comuns i Consells

Errors Comuns

  • No especificar correctament els camps: Assegura't que els noms dels camps en els filtres i l'ordenació coincideixin exactament amb els noms dels camps en els documents.
  • Confondre filtres i cerques: Recorda que els filtres no calculen la rellevància, només inclouen o exclouen documents basats en condicions.

Consells

  • Utilitza filtres per millorar el rendiment: Els filtres són més eficients que les cerques de text complet perquè no calculen la rellevància.
  • Combina filtres i cerques: Pots combinar filtres amb cerques de text complet per obtenir resultats rellevants i precisos.

Conclusió

En aquesta secció, hem après com utilitzar el filtratge i l'ordenació en Elasticsearch per refinar les cerques i obtenir resultats més rellevants. Hem vist exemples pràctics de com aplicar filtres de termes i rangs, així com com ordenar els resultats per camps específics. També hem practicat combinant filtratge i ordenació en una sola consulta. Amb aquestes tècniques, estaràs millor preparat per treballar amb grans volums de dades en Elasticsearch.

© Copyright 2024. Tots els drets reservats