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.
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.
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
}
}
In diesem Beispiel,{{kw}}
Und{{size}}
ist eine übergebene Variable in der Vorlageparams
Objekte übergeben bestimmte Werte.
toJSON
Die 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": "真正的数值"
}
}
}
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": ["大众", "标致", "奔驰", "宝马"]
}
}
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
}
}
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}}"
}
}
}
}
}
Ü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的参数值"
}
}
Definierte Vorlageninformationen können über GET-Anfragen abgefragt werden, zum Beispiel:
GET _scripts/my_test_template
Wenn Sie eine definierte Vorlage löschen müssen, können Sie beispielsweise eine DELETE-Anfrage verwenden:
DELETE _scripts/my_test_template
Elasticsearch bietet_render/template
API zur Validierung der Vorlage.