Compartir tecnología

Plantillas de búsqueda de Elasticsearch: reutilizar y compartir consultas

2024-07-12

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

En el desarrollo y operación diario de Elasticsearch (ES), a menudo nos encontramos con escenarios en los que es necesario ejecutar consultas similares con frecuencia. Estas consultas pueden involucrar múltiples campos, condiciones de filtrado y análisis agregados debido a la complejidad de la lógica empresarial. Para optimizar estas operaciones y mejorar la eficiencia del desarrollo, Elasticsearch proporciona la función de plantillas de búsqueda. Este artículo explica cómo utilizar las plantillas de búsqueda de Elasticsearch para reutilizar y compartir consultas.

1. ¿Por qué utilizar plantillas de búsqueda?

En el desarrollo diario, aunque la mayoría de las consultas pueden ser relativamente simples, en algunos escenarios comerciales complejos (como finanzas, medicina, etc.), es posible que una búsqueda deba pasar o devolver docenas de campos e implicar condiciones de filtrado y análisis de agregación complejos. . En este punto, escribir manualmente cada consulta no solo es ineficiente, sino también propenso a errores. Las plantillas de búsqueda son como procedimientos o funciones almacenados en MySQL. Solo necesitan definirse una vez, y la función de búsqueda se puede completar más adelante en el código llamando a la plantilla y pasando parámetros, lo que mejora en gran medida la eficiencia del desarrollo y la flexibilidad de las consultas.

2. Caso introductorio de plantilla de búsqueda.

2.1 Formulario estándar

La forma básica de la plantilla de búsqueda es definir un objeto JSON que contiene condiciones de consulta y pasar_search/template Llamadas API. Por ejemplo:

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

En este ejemplo,{{kw}}y{{size}}es una variable en la plantilla, pasadaparamsLos objetos pasan valores específicos.

2.2 al formato JSON

toJSONLa forma se caracteriza porsource Utilice cadenas para definir y se requieren caracteres de escape. Por ejemplo:

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

2.3 Pasar parámetros en el método de unión

usarjoin El método puede concatenar los elementos de la matriz en una cadena para las condiciones de consulta. Por ejemplo:

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 Formulario de valor predeterminado

Puede establecer valores predeterminados para los parámetros en la plantilla. Si el parámetro no se pasa al llamar, se utilizará el valor predeterminado. Por ejemplo:

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. Memoriza la plantilla e implementa llamadas repetidas.

3.1 Plantilla para guardar de Elasticsearch

Para reutilizar la plantilla, podemos guardarla en Elasticsearch. Al especificar el nombre de la plantilla, es conveniente llamarla repetidamente más tarde. Por ejemplo:

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 Plantilla de llamada

Al llamar a la plantilla, paseid Para especificar una plantilla específica y pasar los parámetros correspondientes. Por ejemplo:

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

3.3 Consultar la plantilla definida

La información de la plantilla definida se puede consultar mediante solicitudes GET, por ejemplo:

GET _scripts/my_test_template
  • 1

3.4 Eliminar una plantilla definida

Si necesita eliminar una plantilla definida, puede utilizar una solicitud DELETE, por ejemplo:

DELETE _scripts/my_test_template
  • 1

4. Aplicación Avanzada de Plantillas de Búsqueda

4.1 Plantilla de verificación

Elasticsearch proporciona_render/template API para validar la plantilla.