Condivisione della tecnologia

Modelli di ricerca Elasticsearch: riutilizzare e condividere query

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Nello sviluppo e nel funzionamento quotidiano di Elasticsearch (ES), incontriamo spesso scenari in cui query simili devono essere eseguite frequentemente. Queste query possono coinvolgere più campi, condizioni di filtro e analisi aggregate a causa della complessità della logica aziendale. Per ottimizzare queste operazioni e migliorare l'efficienza dello sviluppo, Elasticsearch fornisce la funzione di modelli di ricerca. Questo articolo spiega come utilizzare i modelli di ricerca di Elasticsearch per riutilizzare e condividere query.

1. Perché utilizzare i modelli di ricerca

Nello sviluppo quotidiano, sebbene la maggior parte delle query possa essere relativamente semplice, in alcuni scenari aziendali complessi (come finanza, medicina, ecc.), una ricerca potrebbe dover passare o restituire dozzine di campi e comportare complesse condizioni di filtraggio e analisi di aggregazione . A questo punto, scrivere manualmente ogni query non solo è inefficiente, ma anche soggetto a errori. I modelli di ricerca sono come procedure o funzioni memorizzate in MySQL. Devono essere definiti solo una volta e la funzione di ricerca può essere completata successivamente nel codice chiamando il modello e passando i parametri, il che migliora notevolmente l'efficienza dello sviluppo e la flessibilità delle query.

2. Caso introduttivo del modello di ricerca

2.1 Modulo standard

La forma base del modello di ricerca consiste nel definire un oggetto JSON contenente le condizioni della query e il passaggio_search/template Chiamate API. Per esempio:

GET /index_name/_search/template
{
  "source": {
    "query": {
      "match": {
        "remark": "{{kw}}"
      }
    },
    "size": "{{size}}"
  },
  "params": {
    "kw": "真正的数值",
    "size": 100
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

In questo esempio,{{kw}}E{{size}}è una variabile nel modello, passataparamsGli oggetti trasmettono valori specifici.

2.2 in formato JSON

toJSONLa forma è caratterizzata dasource Utilizzare le stringhe per definire e sono richiesti caratteri di escape. Per esempio:

GET cars/_search/template
{
  "source": "{ "query": { "match": {{#toJson}}parameter{{/toJson}} }}",
  "params": {
    "parameter": {
      "remark": "真正的数值"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.3 Passaggio di parametri nel metodo join

utilizzojoin Il metodo può concatenare gli elementi dell'array in una stringa per le condizioni della query. Per esempio:

GET index_name/_search/template
{
  "source": {
    "query": {
      "match": {
        "remark": "{{#join delimiter=' '}}kw{{/join delimiter=' '}}"
      }
    }
  },
  "params": {
    "kw": ["大众", "标致", "奔驰", "宝马"]
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.4 Modulo valore predefinito

È possibile impostare valori predefiniti per i parametri nel modello. Se il parametro non viene passato durante la chiamata, verrà utilizzato il valore predefinito. Per esempio:

GET index_name/_search/template
{
  "source": {
    "query": {
      "range": {
        "price": {
          "gte": "{{start}}",
          "lte": "{{end}}{{^end}}200000{{/end}}"
        }
      }
    }
  },
  "params": {
    "start": 100000
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3. Memorizzare il modello e implementare chiamate ripetute

3.1 Modello di salvataggio Elasticsearch

Per riutilizzare il modello, possiamo salvarlo in Elasticsearch. Specificando il nome del modello, è conveniente richiamarlo più volte in seguito. Per esempio:

POST _scripts/my_test_template
{
  "script": {
    "lang": "mustache",
    "source": {
      "query": {
        "match": {
          "field_name": "{{kw}}"
        }
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3.2 Modello di bando

Quando chiami il modello, passaid Per specificare un modello specifico e passare i parametri corrispondenti. Per esempio:

GET index_name/_search/template
{
  "id": "my_test_template",
  "params": {
    "kw": "自定义template的参数值"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.3 Interrogare il modello definito

Le informazioni sul modello definito possono essere interrogate tramite richieste GET, ad esempio:

GET _scripts/my_test_template
  • 1

3.4 Eliminare un modello definito

Se è necessario eliminare un modello definito, è possibile utilizzare una richiesta DELETE, ad esempio:

DELETE _scripts/my_test_template
  • 1

4. Applicazione avanzata dei modelli di ricerca

4.1 Modello di verifica

Elasticsearch fornisce_render/template API per convalidare il modello.