Red de conocimiento informático - Aprendizaje de programación - La solución de Elasticsearch al problema: muestre su DSL

La solución de Elasticsearch al problema: muestre su DSL

0. Introducción

En el desarrollo empresarial, a menudo nos quedamos atrapados en las minucias del desarrollo e ignoramos el origen de las cosas.

Los estudiantes suelen preguntar:

Espera, espera...

Si las preguntas aparentemente complicadas anteriores se convierten a DSL, deben escribirse con claridad. y resuelva los entresijos del problema, y ​​​​más de la mitad del problema se resolverá de forma natural.

Entonces, muestre su dsl. No importa en qué idioma esté la búsqueda, la consulta convertida a es es una consulta SQL. En es, corresponde a la sintaxis de dsl y luego la desensambla. la frase de coincidencia de segmentación de palabras se desmonta en cada combinación de términos y finalmente se pasa a Lucene para su procesamiento.

Mostrar su dsl y asegurarse de que la implementación de la programación sea coherente con su kibana o complemento principal es una tarea muy importante y que fácilmente se pasa por alto.

Si no comprende el desmontaje de DSL, agregue perfil: verdadero o explique: verdadero para ver los resultados del desmontaje de un vistazo.

Definición de Wikipedia: lenguaje específico de dominio (inglés: lenguaje específico de dominio, DSL) se refiere a un lenguaje informático que se centra en un área de aplicación determinada. También traducido como lenguaje específico de dominio.

Elasticsearch proporciona un DSL de consulta completo basado en JSON para definir consultas. Piense en Query DSL como el AST (árbol de sintaxis abstracta) de la consulta, que consta de dos tipos de cláusulas:

1. Cláusulas de consulta hoja

Las cláusulas de consulta hoja encuentran campos específicos Un valor en una consulta, como una consulta de coincidencia, término o rango. Estas consultas se pueden utilizar individualmente.

2. Cláusula de consulta compuesta

Las cláusulas de consulta compuesta se pueden combinar con otras hojas o consultas compuestas para combinar múltiples consultas de manera lógica (como consultas bool o dis_max), o Cambiar su comportamiento (por ejemplo, consulta de puntuación constante).

Pon un ejemplo y lo entenderás de un vistazo.

Al ver esto, algunas personas pueden sentirse ansiosas: "Al menos 100 millones de personas en China no saben la verdad". De manera similar, no importa cuán obvia sea la pregunta, mucha gente la hará en la comunidad técnica de Elasticsearch.

La cognición básica no teme a la repetición, pero lo terrible es el estudio especial, el pulido y la solidificación de lo básico.

Las operaciones principales relacionadas con Elasticsearch se pueden interpretar de la siguiente manera en un sentido amplio, que puede no necesariamente cubrirlas todas. Solo sirven como un punto de partida para ilustrar la importancia de DSL.

De mayor a menor.

Para la gestión de clústeres, generalmente utilizamos Kibana o herramientas de terceros, el complemento Head, la herramienta cerebro y la herramienta elastic-hq.

Básicamente, el uso del hardware (disco, CPU, memoria) y el estado del clúster se pueden ver de un vistazo.

Pero un DSL básico será más conveniente y facilitará un análisis detallado de los problemas.

Por ejemplo: Consultar el estado del clúster:

Por ejemplo: Verificar los subprocesos del punto de acceso del nodo:

Por ejemplo: Verificar la asignación de fragmentos del clúster:

El ciclo de vida del índice es un concepto en el que siempre se ha enfatizado, refiriéndose principalmente a la gestión de toda la cadena de procesos de "nacimiento, vejez, enfermedad y muerte" del índice.

A la hora de crear un índice, damos prioridad al uso de plantillas que son más flexibles que los índices simples.

Crear un índice es similar a la operación de crear una tabla en Mysql. Es muy importante diseñar la estructura de la tabla de antemano para que corresponda a ES. Es muy importante diseñar el mapeo de antemano.

Dos dimensiones:

Ejemplo:

Tales como: caché de limpieza de índice.

Por ejemplo: los fragmentos se reasignan por algún motivo, _recovery verifica el estado de asignación de fragmentos.

Se recomienda utilizar la función ILM para versiones superiores de gestión del ciclo de vida del índice.

Esto es algo que todo el mundo conoce.

Ejemplo:

La eliminación de datos incluye: especificar la eliminación de ID, eliminar y eliminar por lotes, eliminar_por_consulta (cumpliendo las condiciones dadas).

Operación de actualización. Incluyendo: actualización/actualización de la identificación especificada o actualización por lotes update_by_query.

Esto es lo más destacado de ES. Incluyendo, entre otros:

1. Admite consultas de coincidencia exacta: término, rango, existe, comodín, prefijo, difuso, etc.

2. Admite búsqueda de texto completo: match, match_phrase, query_string, multi_match, etc.

1. Agregación de buckets

Ejemplo: el más utilizado Los términos son similares al grupo por función de Mysql. 2. Agregación de cálculo de métricas

Ejemplo: Analogía con las operaciones MIN, MAX, SUM en Mysql. 3. Pipeline agrega resultados de agregación

Ejemplo: bucket_script implementa una operación similar a group by y luego have de Mysql.

Deje que todos agreguen según los escenarios comerciales.

A continuación se detallan una a una algunas respuestas a las preguntas mencionadas al principio.

En el negocio Mysql real, generalmente verificamos que no haya ningún problema con SQL antes de escribir el código comercial.

En el negocio ES real, lo mismo ocurre. Primero, DSL confirma que no hay ningún problema y luego escribe el código comercial.

Después de escribir java o python, imprima el DSL y verifique si es completamente consistente.

Las inconsistencias son básicamente las razones por las cuales los resultados no son consistentes con las expectativas.

Paso uno: utilice la API del analizador para analizar la declaración de la consulta y los resultados de la segmentación de palabras del documento que se va a consultar.

No se puede subestimar la importancia de esta API.

Paso 2: Puedes usar perfil: verdadero para ver los detalles. Paso 3: Verifique el principio del orden de las palabras match_phrase.

SQL ha sido compatible desde la versión 6.3. Si no sabes escribir, puedes usar la API de traducción a continuación para traducirlo.

No es lo suficientemente preciso, pero es suficiente como referencia y debe ajustarse de acuerdo con los detalles comerciales.

Por supuesto, todavía se recomienda escribir su propio DSL según consideraciones comerciales.

De grande a pequeño, refine y solucione problemas gradualmente

FIN

Responda a la entrevista, ES, Flink, Spring, Java, Kafka en la cuenta pública ( zhisheng), monitoreo y otras palabras clave, puede ver más artículos correspondientes a las palabras clave

1. "Aprendiendo Flink de 0 a 1" - Introducción a Apache Flink

2. "De 0 a 1" Aprendiendo Flink》——Comenzando a construir un entorno Flink 1.6.0 en Mac y compilando y ejecutando programas simples

3. “Aprendiendo Flink de 0 a 1”——Explicación detallada de Flink archivos de configuración

4, "Aprendiendo Flink de 0 a 1" - Introducción a la fuente de datos

5. "Aprendiendo Flink de 0 a 1" - ¿Cómo personalizar la fuente de datos?

6. "Aprendiendo Flink de 0 a 1" - Introducción a Data Sink

7. "Aprendiendo Flink de 0 a 1" - ¿Cómo personalizar Data Sink?

8. "Aprendiendo Flink de 0 a 1" - Transformación de datos de Flink (conversión)

9. "Aprendiendo Flink de 0 a 1" - Introducción a Stream Windows en Flink

10. "Aprendiendo Flink de 0 a 1": explicación detallada de varias veces en Flink

11. "Aprendiendo Flink de 0 a 1": Flink lee datos de Kafka y escribe en ElasticSearch

12. "Aprendiendo Flink de 0 a 1": ¿cómo se ejecuta el proyecto Flink?

13. "Aprendiendo Flink de 0 a 1" - Flink lee Kafka y escribe datos en Kafka

14. "Aprendiendo Flink de 0 a 1" - Configuración de alta disponibilidad de Flink JobManager

15. "Aprendiendo Flink de 0 a 1" - Introducción al paralelismo y ranura de Flink

16. "Aprendiendo Flink de 0 a 1" - Flink leyendo datos de Kafka Escritura por lotes en MySQL

17. "Aprendiendo Flink de 0 a 1": Flink lee datos de Kafka y los escribe en RabbitMQ

18. "Aprendiendo Flink de 0 a 1" ——¿Dónde está el paquete jar? ¿Lo subiste?

19. Big data "Blockbuster" - marco informático en tiempo real Flink

20. "Análisis de código fuente de Flink" - código fuente Compilar y ejecutar

21. ¿Por qué el procesamiento de transmisiones es el futuro?

22. La piedra angular del centro de datos de OPPO: construir un almacén de datos real basado en Flink SQL

23. Comparación de rendimiento entre el marco de computación de flujo Flink y Storm

24. Introducción a la gestión del estado de Flink y al mecanismo de tolerancia a fallas

25. Análisis de principios | Apache Flink combina Kafka para construir un procesamiento Exactly-Once de extremo a extremo

26. ¿Cómo funciona? ¿Apache Flink gestiona la memoria?

27. "Aprendiendo Flink de 0 a 1" - ¿Sabes cómo gestionar la configuración en Flink?

28. “Aprendiendo del 0 al 1

Aprendiendo Flink》——¿Flink no se puede dividir continuamente?

29. Flink aprende de 0 a 1: compartimos cuatro libros de Flink y más de 20 artículos en papel.

30. Práctica en profundidad 360: comparación de niveles de protocolo Flink y Storm

31. Interpretación avanzada de las principales características de Apache Flink 1.9

32. ¿Cómo construir una plataforma inteligente de detección de anomalías en tiempo real basada en Flink TensorFlow? Con solo leer este artículo es suficiente

33. La práctica de construcción de almacenes de datos en tiempo real de Meituan-Dianping basada en Flink

34. Las doscientas preguntas del alma de Flink, ¿quién puede soportar esto?

35. Comprenda exactamente una vez y al menos una vez de Flink en un artículo

36. ¿Su empresa necesita introducir un motor informático en tiempo real?