Technologieaustausch

Elasticsearch-Suchvorlagen: Abfragen wiederverwenden und teilen

2024-07-12

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

Bei der täglichen Entwicklung und dem Betrieb von Elasticsearch (ES) stoßen wir häufig auf Szenarien, in denen ähnliche Abfragen häufig ausgeführt werden müssen. Aufgrund der Komplexität der Geschäftslogik können diese Abfragen mehrere Felder, Filterbedingungen und aggregierte Analysen umfassen. Um diese Vorgänge zu optimieren und die Entwicklungseffizienz zu verbessern, bietet Elasticsearch die Funktion von Suchvorlagen. In diesem Artikel wird erläutert, wie Sie die Suchvorlagen von Elasticsearch verwenden, um Abfragen wiederzuverwenden und zu teilen.

1. Warum Suchvorlagen verwenden?

Obwohl die meisten Abfragen in der täglichen Entwicklung relativ einfach sein können, muss eine Suche in einigen komplexen Geschäftsszenarien (z. B. Finanzen, Medizin usw.) möglicherweise Dutzende von Feldern übergeben oder zurückgeben und komplexe Filterbedingungen und Aggregationsanalysen erfordern . Zu diesem Zeitpunkt ist das manuelle Schreiben jeder Abfrage nicht nur ineffizient, sondern auch fehleranfällig. Suchvorlagen ähneln gespeicherten Prozeduren oder Funktionen in MySQL. Sie müssen nur einmal definiert werden, und die Suchfunktion kann später im Code durch Aufrufen der Vorlage und Übergeben von Parametern vervollständigt werden, was die Entwicklungseffizienz und Abfrageflexibilität erheblich verbessert.

2. Einführungsfall der Suchvorlage

2.1 Standardformular

Die Grundform der Suchvorlage besteht darin, ein JSON-Objekt zu definieren, das Abfragebedingungen und -übergaben enthält_search/template API-Aufrufe. Zum Beispiel:

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 diesem Beispiel,{{kw}}Und{{size}}ist eine übergebene Variable in der VorlageparamsObjekte übergeben bestimmte Werte.

2.2 in das JSON-Format

toJSONDie Form zeichnet sich aus durchsource Verwenden Sie zum Definieren Zeichenfolgen, und Escape-Zeichen sind erforderlich. Zum Beispiel:

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

2.3 Übergabe von Parametern in der Join-Methode

verwendenjoin Die Methode kann die Elemente im Array zu einer Zeichenfolge für Abfragebedingungen verketten. Zum Beispiel:

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 Standardwertformular

Sie können Standardwerte für Parameter in der Vorlage festlegen. Wenn der Parameter beim Aufruf nicht übergeben wird, wird der Standardwert verwendet. Zum Beispiel:

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. Merken Sie sich die Vorlage und führen Sie wiederholte Aufrufe durch

3.1 Elasticsearch-Speichervorlage

Um die Vorlage wiederzuverwenden, können wir sie in Elasticsearch speichern. Durch die Angabe des Namens der Vorlage ist es praktisch, diese später wiederholt aufzurufen. Zum Beispiel:

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 Anrufvorlage

Übergeben Sie beim Aufrufen der Vorlageid Um eine bestimmte Vorlage anzugeben und die entsprechenden Parameter zu übergeben. Zum Beispiel:

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

3.3 Fragen Sie die definierte Vorlage ab

Definierte Vorlageninformationen können über GET-Anfragen abgefragt werden, zum Beispiel:

GET _scripts/my_test_template
  • 1

3.4 Eine definierte Vorlage löschen

Wenn Sie eine definierte Vorlage löschen müssen, können Sie beispielsweise eine DELETE-Anfrage verwenden:

DELETE _scripts/my_test_template
  • 1

4. Erweiterte Anwendung von Suchvorlagen

4.1 Verifizierungsvorlage

Elasticsearch bietet_render/template API zur Validierung der Vorlage.