informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Dalam pengembangan dan pengoperasian Elasticsearch (ES) sehari-hari, kita sering menjumpai skenario di mana kueri serupa perlu sering dieksekusi. Kueri ini mungkin melibatkan beberapa bidang, kondisi filter, dan analisis agregat karena kompleksitas logika bisnis. Untuk mengoptimalkan operasi ini dan meningkatkan efisiensi pengembangan, Elasticsearch menyediakan fungsi templat pencarian. Artikel ini menjelaskan cara menggunakan templat pencarian Elasticsearch untuk menggunakan kembali dan membagikan kueri.
Dalam perkembangan sehari-hari, meskipun sebagian besar kueri mungkin relatif sederhana, dalam beberapa skenario bisnis yang kompleks (seperti keuangan, kedokteran, dll.), penelusuran mungkin perlu melewati atau mengembalikan lusinan bidang, dan melibatkan kondisi pemfilteran dan analisis agregasi yang rumit . Pada titik ini, menulis setiap kueri secara manual tidak hanya tidak efisien, tetapi juga rawan kesalahan. Templat pencarian seperti prosedur atau fungsi tersimpan di MySQL. Mereka hanya perlu didefinisikan satu kali, dan fungsi pencarian dapat diselesaikan nanti dalam kode dengan memanggil templat dan meneruskan parameter, yang sangat meningkatkan efisiensi pengembangan dan fleksibilitas kueri.
Bentuk dasar template pencarian adalah mendefinisikan objek JSON yang berisi kondisi kueri dan pass_search/template
panggilan API. Misalnya:
GET /index_name/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{kw}}"
}
},
"size": "{{size}}"
},
"params": {
"kw": "真正的数值",
"size": 100
}
}
Dalam contoh ini,{{kw}}
Dan{{size}}
adalah variabel dalam templat, diteruskanparams
Objek memberikan nilai tertentu.
toJSON
Bentuknya ditandai dengansource
Gunakan string untuk mendefinisikan, dan karakter escape diperlukan. Misalnya:
GET cars/_search/template
{
"source": "{ "query": { "match": {{#toJson}}parameter{{/toJson}} }}",
"params": {
"parameter": {
"remark": "真正的数值"
}
}
}
menggunakanjoin
Metode ini dapat menggabungkan elemen-elemen dalam array menjadi string untuk kondisi kueri. Misalnya:
GET index_name/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{#join delimiter=' '}}kw{{/join delimiter=' '}}"
}
}
},
"params": {
"kw": ["大众", "标致", "奔驰", "宝马"]
}
}
Anda dapat mengatur nilai default untuk parameter di templat. Jika parameter tidak diteruskan saat memanggil, nilai default akan digunakan. Misalnya:
GET index_name/_search/template
{
"source": {
"query": {
"range": {
"price": {
"gte": "{{start}}",
"lte": "{{end}}{{^end}}200000{{/end}}"
}
}
}
},
"params": {
"start": 100000
}
}
Untuk menggunakan kembali template, kita dapat menyimpannya di Elasticsearch. Dengan menentukan nama templat, akan lebih mudah untuk memanggilnya berulang kali nanti. Misalnya:
POST _scripts/my_test_template
{
"script": {
"lang": "mustache",
"source": {
"query": {
"match": {
"field_name": "{{kw}}"
}
}
}
}
}
Saat memanggil templat, lewatiid
Untuk menentukan template tertentu dan meneruskan parameter yang sesuai. Misalnya:
GET index_name/_search/template
{
"id": "my_test_template",
"params": {
"kw": "自定义template的参数值"
}
}
Informasi template yang ditentukan dapat ditanyakan melalui permintaan GET, misalnya:
GET _scripts/my_test_template
Jika Anda perlu menghapus templat yang ditentukan, Anda dapat menggunakan permintaan DELETE, misalnya:
DELETE _scripts/my_test_template
Elasticsearch menyediakan_render/template
API untuk memvalidasi templat.