моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
В повседневной разработке и эксплуатации Elasticsearch (ES) мы часто сталкиваемся со сценариями, когда аналогичные запросы необходимо выполнять часто. Эти запросы могут включать в себя несколько полей, условий фильтрации и агрегатный анализ из-за сложности бизнес-логики. Чтобы оптимизировать эти операции и повысить эффективность разработки, Elasticsearch предоставляет функцию шаблонов поиска. В этой статье объясняется, как использовать шаблоны поиска Elasticsearch для повторного использования и обмена запросами.
В повседневной разработке, хотя большинство запросов могут быть относительно простыми, в некоторых сложных бизнес-сценариях (например, финансы, медицина и т. д.) при поиске может потребоваться передать или вернуть десятки полей и включить сложные условия фильтрации и агрегирования. . На этом этапе написание каждого запроса вручную не только неэффективно, но и чревато ошибками. Шаблоны поиска подобны хранимым процедурам или функциям в MySQL. Их нужно определить только один раз, а функцию поиска можно выполнить позже в коде, вызвав шаблон и передав параметры, что значительно повышает эффективность разработки и гибкость запросов.
Основная форма шаблона поиска заключается в определении объекта 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
Для определения используйте строки, а escape-символы обязательны. Например:
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 для проверки шаблона.