Elasticsearch Query DSL (Domain Specific Language) és un llenguatge específic de domini que permet construir cerques complexes i potents en Elasticsearch. Aquest llenguatge és molt flexible i permet combinar diferents tipus de cerques i filtres per obtenir resultats precisos.

Conceptes Clau

Abans de començar a construir cerques amb Query DSL, és important entendre alguns conceptes bàsics:

  • Query: Una consulta que recupera documents que compleixen certs criteris.
  • Filter: Un filtre que restringeix els documents que es consideren per a una consulta.
  • Bool Query: Una consulta que combina múltiples subconsultes amb operadors lògics (AND, OR, NOT).

Tipus de Consultes

Elasticsearch ofereix diversos tipus de consultes que es poden utilitzar en Query DSL. A continuació, es presenten alguns dels més comuns:

  1. Match Query

La consulta match és una de les més utilitzades i permet buscar documents que continguin un text determinat en un camp específic.

{
  "query": {
    "match": {
      "field_name": "search_text"
    }
  }
}

  1. Term Query

La consulta term busca documents que continguin un valor exacte en un camp.

{
  "query": {
    "term": {
      "field_name": "exact_value"
    }
  }
}

  1. Range Query

La consulta range permet buscar documents que tinguin valors dins d'un rang específic.

{
  "query": {
    "range": {
      "field_name": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

  1. Bool Query

La consulta bool permet combinar múltiples subconsultes amb operadors lògics.

{
  "query": {
    "bool": {
      "must": [
        { "match": { "field_name": "value1" } }
      ],
      "filter": [
        { "term": { "field_name": "value2" } }
      ],
      "must_not": [
        { "range": { "field_name": { "gte": 10, "lte": 20 } } }
      ],
      "should": [
        { "match": { "field_name": "value3" } }
      ]
    }
  }
}

Exemples Pràctics

Exemple 1: Cerca Bàsica amb Match Query

{
  "query": {
    "match": {
      "title": "Elasticsearch"
    }
  }
}

Explicació: Aquesta consulta busca documents on el camp title contingui la paraula "Elasticsearch".

Exemple 2: Filtratge amb Term Query

{
  "query": {
    "term": {
      "status": "active"
    }
  }
}

Explicació: Aquesta consulta busca documents on el camp status tingui el valor exacte "active".

Exemple 3: Cerca amb Rang de Dates

{
  "query": {
    "range": {
      "date": {
        "gte": "2023-01-01",
        "lte": "2023-12-31"
      }
    }
  }
}

Explicació: Aquesta consulta busca documents on el camp date estigui dins del rang de l'1 de gener de 2023 al 31 de desembre de 2023.

Exemple 4: Combinació de Consultes amb Bool Query

{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "Elasticsearch" } }
      ],
      "filter": [
        { "term": { "status": "active" } }
      ],
      "must_not": [
        { "range": { "date": { "gte": "2024-01-01" } } }
      ],
      "should": [
        { "match": { "description": "search engine" } }
      ]
    }
  }
}

Explicació: Aquesta consulta busca documents que compleixin les següents condicions:

  • El camp title ha de contenir "Elasticsearch".
  • El camp status ha de tenir el valor exacte "active".
  • El camp date no ha de ser posterior a l'1 de gener de 2024.
  • És desitjable que el camp description contingui "search engine".

Exercicis Pràctics

Exercici 1: Cerca de Text Complet

Crea una consulta que busqui documents on el camp content contingui la paraula "tutorial".

Solució:

{
  "query": {
    "match": {
      "content": "tutorial"
    }
  }
}

Exercici 2: Filtratge per Valor Exacte

Crea una consulta que busqui documents on el camp category tingui el valor exacte "technology".

Solució:

{
  "query": {
    "term": {
      "category": "technology"
    }
  }
}

Exercici 3: Cerca amb Rang de Valors

Crea una consulta que busqui documents on el camp price estigui entre 50 i 100.

Solució:

{
  "query": {
    "range": {
      "price": {
        "gte": 50,
        "lte": 100
      }
    }
  }
}

Exercici 4: Combinació de Consultes

Crea una consulta que busqui documents on:

  • El camp author contingui "John".
  • El camp status tingui el valor exacte "published".
  • El camp views no sigui menor de 1000.
  • És desitjable que el camp tags contingui "Elasticsearch".

Solució:

{
  "query": {
    "bool": {
      "must": [
        { "match": { "author": "John" } }
      ],
      "filter": [
        { "term": { "status": "published" } }
      ],
      "must_not": [
        { "range": { "views": { "lt": 1000 } } }
      ],
      "should": [
        { "match": { "tags": "Elasticsearch" } }
      ]
    }
  }
}

Conclusió

Elasticsearch Query DSL és una eina poderosa per construir cerques complexes i precises. Amb una comprensió bàsica dels diferents tipus de consultes i com combinar-les, pots aprofitar al màxim les capacitats de cerca d'Elasticsearch. Practica amb els exemples i exercicis proporcionats per familiaritzar-te amb les diferents opcions disponibles.

© Copyright 2024. Tots els drets reservats