私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Elasticsearch (ES) の日々の開発と運用では、同様のクエリを頻繁に実行する必要があるシナリオに遭遇することがよくあります。ビジネス ロジックの複雑さにより、これらのクエリには複数のフィールド、フィルター条件、集計分析が含まれる場合があります。これらの動作を最適化し、開発効率を向上させるために、Elasticsearchでは検索テンプレートの機能を提供しています。この記事では、Elasticsearch の検索テンプレートを使用してクエリを再利用および共有する方法について説明します。
日常の開発では、ほとんどのクエリは比較的単純ですが、一部の複雑なビジネス シナリオ (金融、医療など) では、検索で数十のフィールドを渡したり返したりする必要があり、複雑なフィルタリング条件や集計分析が必要になる場合があります。 。この時点で、各クエリを手動で作成することは非効率であるだけでなく、エラーが発生しやすくなります。検索テンプレートは MySQL のストアド プロシージャや関数に似ており、定義する必要があるのは 1 回だけであり、後からコード内でテンプレートを呼び出してパラメータを渡すことで検索関数を完了できるため、開発効率とクエリの柔軟性が大幅に向上します。
検索テンプレートの基本的な形式は、クエリ条件を含む JSON オブジェクトを定義し、_search/template
API 呼び出し。例えば:
GET /index_name/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{kw}}"
}
},
"size": "{{size}}"
},
"params": {
"kw": "真正的数值",
"size": 100
}
}
この例では、{{kw}}
そして{{size}}
テンプレート内の変数であり、渡されますparams
オブジェクトは特定の値を渡します。
toJSON
フォルムの特徴としては、source
定義には文字列を使用し、エスケープ文字が必要です。例えば:
GET cars/_search/template
{
"source": "{ "query": { "match": {{#toJson}}parameter{{/toJson}} }}",
"params": {
"parameter": {
"remark": "真正的数值"
}
}
}
使用join
このメソッドは、配列内の要素をクエリ条件の文字列に連結できます。例えば:
GET index_name/_search/template
{
"source": {
"query": {
"match": {
"remark": "{{#join delimiter=' '}}kw{{/join delimiter=' '}}"
}
}
},
"params": {
"kw": ["大众", "标致", "奔驰", "宝马"]
}
}
テンプレート内のパラメータのデフォルト値を設定できます。呼び出し時にパラメータが渡されない場合は、デフォルト値が使用されます。例えば:
GET index_name/_search/template
{
"source": {
"query": {
"range": {
"price": {
"gte": "{{start}}",
"lte": "{{end}}{{^end}}200000{{/end}}"
}
}
}
},
"params": {
"start": 100000
}
}
テンプレートを再利用するには、Elasticsearch に保存します。テンプレート名を指定しておくと、後から繰り返し呼び出すことができて便利です。例えば:
POST _scripts/my_test_template
{
"script": {
"lang": "mustache",
"source": {
"query": {
"match": {
"field_name": "{{kw}}"
}
}
}
}
}
テンプレートを呼び出すときに、id
特定のテンプレートを指定し、対応するパラメーターを渡します。例えば:
GET index_name/_search/template
{
"id": "my_test_template",
"params": {
"kw": "自定义template的参数值"
}
}
定義されたテンプレート情報は、次のような GET リクエストを通じてクエリできます。
GET _scripts/my_test_template
定義されたテンプレートを削除する必要がある場合は、次のような DELETE リクエストを使用できます。
DELETE _scripts/my_test_template
Elasticsearch が提供するのは_render/template
テンプレートを検証するための API。