Implementación de Elasticsearch en un entorno de producción: mejores prácticas y sugerencias para la resolución de problemas: agregación y búsqueda (3)

prefacio

inserte la descripción de la imagen aquí
"Página de inicio del autor" : Sprite Youbai Bubbles
"Sitio web personal" : Sitio web personal de Sprite
"Columna de recomendaciones" :

Servicio de ventanilla única de Java
Reaccionar desde la entrada hasta la competencia
Genial intercambio de código de front-end
De 0 a héroe, el camino para que Vue se convierta en un dios
uniapp: desde la construcción hasta la promoción
De 0 a héroe, Vue convertirse en un dios Road
Una columna es suficiente para resolver el algoritmo
Hablemos de la arquitectura desde 0
La forma exquisita de circulación de datos
El camino hacia el backend avanzado

Por favor agregue una descripción de la imagen

inserte la descripción de la imagen aquí

Agregación y Análisis

Realizar operaciones de agregación y medición en Elasticsearch puede ayudarnos a realizar un análisis más profundo de los datos. Este artículo describe cómo usar agregaciones y medidas para realizar operaciones complejas de análisis de datos, como recuentos, promedios, percentiles y agrupaciones.

realizar operaciones agregadas

1. Utilice la API de Java para realizar operaciones de agregación

Se pueden realizar varias operaciones agregadas utilizando la API de Java. El siguiente es un ejemplo de código que usa un objeto RestHighLevelClient para realizar una agregación de términos en un índice denominado my_index:

SearchRequest request = new SearchRequest("my_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
TermsAggregationBuilder aggregation =
    AggregationBuilders.terms("by_age").field("age");
sourceBuilder.aggregation(aggregation);
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);

El código anterior utiliza el objeto SearchRequest y el objeto SearchSourceBuilder para realizar la operación de agregación de términos y agrupar por campo de edad.

2. Use el comando CURL para realizar operaciones de agregación

También se pueden realizar varias operaciones agregadas usando el comando CURL. El siguiente es un ejemplo de recuperación de todos los documentos mediante la operación de agregación de términos en un índice denominado my_index:

curl -XGET 'localhost:9200/my_index/_search?pretty' -H 'Content-Type: application/json' -d'
{
    "aggs" : {
        "by_age" : {
            "terms" : { "field" : "age" }
        }
    }
}
'

Ejecutar operaciones de medida

1. Utilice la API de Java para realizar operaciones de medición

Se pueden realizar varias operaciones métricas utilizando la API de Java. El siguiente es un ejemplo de código que usa un objeto RestHighLevelClient para realizar una operación de métrica promedio en un índice denominado my_index:

SearchRequest request = new SearchRequest("my_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
AvgAggregationBuilder aggregation =
    AggregationBuilders.avg("avg_age").field("age");
sourceBuilder.aggregation(aggregation);
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);

El código anterior usa el objeto SearchRequest y el objeto SearchSourceBuilder para realizar la operación de medida promedio y devuelve el valor promedio del campo de edad.

2. Use el comando CURL para realizar operaciones de medición

También se pueden realizar varias operaciones métricas usando el comando CURL. El siguiente es un ejemplo de recuperación de todos los documentos usando la operación de métrica avg en un índice llamado my_index:

curl -XGET 'localhost:9200/my_index/_search?pretty' -H 'Content-Type: application/json' -d'
{
    "aggs" : {
        "avg_age" : {
            "avg" : { "field" : "age" }
        }
    }
}
'

en conclusión

Este artículo describe cómo usar agregaciones y medidas para realizar operaciones complejas de análisis de datos, como recuentos, promedios, percentiles y agrupaciones. Los datos en el índice de Elasticsearch se pueden agregar y medir mediante la API de Java o los comandos CURL para comprender y analizar mejor los datos. En las aplicaciones prácticas, es necesario seleccionar las operaciones de agregación y medición apropiadas para su uso de acuerdo con las necesidades específicas.

Optimización del rendimiento de búsqueda

La optimización del rendimiento de búsqueda de Elasticsearch es una parte muy importante de su aplicación. Este artículo describe cómo optimizar el rendimiento de búsqueda de Elasticsearch mediante el almacenamiento en caché, el ajuste del tamaño y la cantidad de fragmentos y el uso de sugerencias de búsqueda.

usar caché

Hay dos tipos de cachés en Elasticsearch: caché de consultas y caché de filtros. El almacenamiento en caché de consultas proporciona respuestas rápidas a los mismos resultados de consulta, mientras que el almacenamiento en caché de filtros almacena en caché los resultados de filtros para un uso rápido en búsquedas posteriores. Aquí hay un ejemplo de código para habilitar el almacenamiento en caché del filtro usando la API de Java:

SearchRequest request = new SearchRequest("my_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.termQuery("age", 30));
sourceBuilder.postFilter(QueryBuilders.termQuery("city", "New York"));
sourceBuilder.size(0);
sourceBuilder.aggregation(AggregationBuilders.avg("avg_age").field("age"));
sourceBuilder.aggregation(AggregationBuilders.terms("by_city").field("city"));
sourceBuilder.profile(true);
sourceBuilder.cache(true);
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);

El código anterior permite el almacenamiento en caché de filtros mediante el objeto SearchSourceBuilder.

Ajustar el tamaño y el número de fragmentos

Un fragmento es la unidad básica de datos en Elasticsearch, y dividir los datos en varios fragmentos permite que Elasticsearch maneje mejor grandes conjuntos de datos. Sin embargo, si el fragmento es demasiado grande o demasiado pequeño, afectará el rendimiento de la búsqueda. El siguiente es un ejemplo de código para establecer la cantidad de fragmentos de índice y copias de seguridad mediante la API de Java:

CreateIndexRequest request = new CreateIndexRequest("my_index");
request.settings(Settings.builder()
        .put("index.number_of_shards", 5)
        .put("index.number_of_replicas", 1));

El código anterior usa el objeto CreateIndexRequest para establecer la cantidad de fragmentos del índice denominado my_index en 5 y la cantidad de copias de seguridad en 1.

Usar sugerencias de búsqueda

La sugerencia de búsqueda es una técnica de optimización de búsqueda importante en Elasticsearch. Puede proporcionar funciones como autocompletado, revisión ortográfica y sugerencias de relevancia a medida que los usuarios ingresan consultas de búsqueda. Aquí hay una muestra de código para agregar sugerencias de búsqueda de recomendaciones basadas en texto completo usando la API de Java:

SearchRequest request = new SearchRequest("my_index");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
SuggestionBuilder termSuggestionBuilder =
    SuggestBuilders.termSuggestion("name").text("jonh");
SuggestBuilder suggestBuilder = new SuggestBuilder();
suggestBuilder.addSuggestion("suggest_name", termSuggestionBuilder);
sourceBuilder.suggest(suggestBuilder);
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);

El código anterior agrega una sugerencia de búsqueda sugerida basada en texto completo mediante el objeto SearchSourceBuilder.

en conclusión

Este artículo describe cómo optimizar el rendimiento de búsqueda de Elasticsearch mediante el almacenamiento en caché, el ajuste del tamaño y la cantidad de fragmentos y el uso de sugerencias de búsqueda. El uso de estas tecnologías puede mejorar la capacidad de respuesta de búsqueda y mejorar la experiencia del usuario. En aplicaciones prácticas, es necesario seleccionar un método de optimización apropiado de acuerdo con los requisitos de búsqueda específicos.

gestión de clústeres

Configurar y administrar un clúster de Elasticsearch es clave para hacer que las aplicaciones de Elasticsearch a gran escala se ejecuten correctamente. Este artículo presentará cómo configurar y administrar los clústeres de Elasticsearch mediante la realización de operaciones como el descubrimiento de nodos, el equilibrio de carga y la conmutación por error.

descubrimiento de nodos

El descubrimiento de nodos es un concepto importante en Elasticsearch, que permite que nuevos nodos se unan a un clúster de Elasticsearch existente. El siguiente es un ejemplo de código para habilitar el descubrimiento de nodos mediante la API de Java:

Settings settings = Settings.builder()
    .put("discovery.seed_hosts", "host1:9300,host2:9300")
    .put("cluster.name", "my_cluster_name")
    .build();
TransportClient client = new PreBuiltTransportClient(settings);

El código anterior permite el descubrimiento de nodos mediante el objeto Configuración y establece la lista de nodos en host1 y host2.

balanceo de carga

El equilibrio de carga es una parte muy importante en un sistema distribuido, puede garantizar que todos los nodos del sistema lleven la carga de manera uniforme. El siguiente es un ejemplo de código para agregar la función de equilibrio de carga mediante la API de Java:

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
                .setHttpClientConfigCallback(httpClientBuilder -> 
                    httpClientBuilder.addInterceptorLast(new ElasticsearchInterceptor())));

El código anterior usa el objeto RestClient para agregar un interceptor llamado ElasticsearchInterceptor para lograr el equilibrio de carga.

conmutación por error

La conmutación por error es un problema que debe tenerse en cuenta en un clúster de Elasticsearch. Cuando falla un nodo, se requiere una acción inmediata para reemplazarlo con otro nodo. Aquí hay un ejemplo de código para agregar la funcionalidad de conmutación por error automática utilizando la API de Java:

Settings settings = Settings.builder()
    .put("cluster.routing.allocation.enable", "all")
    .put("cluster.routing.allocation.node_initial_primaries_recoveries", 20)
    .put("cluster.routing.allocation.node_concurrent_recoveries", 2)
    .put("indices.recovery.max_bytes_per_sec", "50mb")
    .build();

El código anterior habilita la función de conmutación por error automática y establece algunos parámetros relacionados, como la velocidad de recuperación del índice y el número de recuperaciones simultáneas.

en conclusión

Este artículo describe cómo configurar y administrar un clúster de Elasticsearch para el descubrimiento de nodos, el equilibrio de carga y la conmutación por error. Estas técnicas pueden hacer que las aplicaciones de Elasticsearch sean más estables, confiables y eficientes. En las aplicaciones prácticas, es necesario seleccionar las opciones de configuración y las soluciones de gestión adecuadas para satisfacer las necesidades específicas.

Seguridad y Control de Acceso

Proteger su clúster y datos de Elasticsearch es imprescindible para cualquier aplicación de producción. Este artículo describe cómo mejorar la seguridad de Elasticsearch mediante técnicas como el control de acceso, el cifrado y la autenticación.

Control de acceso

El control de acceso es un concepto muy importante en Elasticsearch, que garantiza que solo los usuarios autorizados puedan acceder al clúster y los datos de Elasticsearch. Aquí hay una muestra de código para agregar un control de acceso basado en nombre de usuario/contraseña usando la API de Java:

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
                .setHttpClientConfigCallback(httpClientBuilder -> 
                    httpClientBuilder.setDefaultCredentialsProvider(
                        new BasicCredentialsProvider()))
                .setRequestConfigCallback(requestConfigBuilder -> 
                    requestConfigBuilder.setConnectTimeout(5000)
                                         .setSocketTimeout(60000)));

El código anterior usa el objeto RestClient para agregar un objeto BasicCredentialsProvider como el proveedor de credenciales predeterminado para implementar el control de acceso basado en nombre de usuario/contraseña.

cifrado

El cifrado garantiza la seguridad dentro del clúster de Elasticsearch y durante la transferencia de datos. El siguiente es un ejemplo de código para habilitar el cifrado HTTPS mediante la API de Java:

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "https")));

El código anterior usa el objeto RestClient para habilitar el protocolo de cifrado HTTPS para garantizar la seguridad de la transmisión de datos.

Autenticación

La autenticación es un concepto muy importante en Elasticsearch, que garantiza que solo los usuarios autorizados puedan acceder y modificar los clústeres y datos de Elasticsearch. El siguiente es un ejemplo de código para agregar la funcionalidad de autenticación basada en X-Pack usando la API de Java:

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "https"))
                .setHttpClientConfigCallback(httpClientBuilder -> 
                    httpClientBuilder.setDefaultCredentialsProvider(
                        new BasicCredentialsProvider()))
                .setRequestConfigCallback(requestConfigBuilder -> 
                    requestConfigBuilder.setConnectTimeout(5000)
                                         .setSocketTimeout(60000))
                .setXpackBuilder(XPackClientBuilder.builder("username", "password")));

El código anterior habilita la autenticación basada en X-Pack utilizando el objeto RestClient y establece el nombre de usuario y la contraseña en "nombre de usuario" y "contraseña".

en conclusión

Este artículo describe cómo mejorar la seguridad de Elasticsearch mediante técnicas como el control de acceso, el cifrado y la autenticación. Estas tecnologías garantizan la seguridad del clúster y los datos de Elasticsearch y los protegen de accesos y ataques no autorizados. En las aplicaciones prácticas, es necesario seleccionar las medidas de seguridad adecuadas de acuerdo con los requisitos específicos.

integración de aplicaciones

La integración de Elasticsearch en las aplicaciones es clave para permitir la búsqueda y el análisis de datos. Este artículo le mostrará cómo integrar Elasticsearch en su aplicación utilizando la API REST y varias bibliotecas de clientes.

API REST

Elasticsearch proporciona una API REST para que las aplicaciones puedan interactuar con Elasticsearch a través del protocolo HTTP. Este es un ejemplo de cómo agregar documentos a un índice de Elasticsearch usando código Java:

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http")));
IndexRequest request = new IndexRequest("my_index");
request.id("1");
String jsonString = "{" +
        "\"name\":\"John\"," +
        "\"age\":30," +
        "\"city\":\"New York\"" +
        "}";
request.source(jsonString, XContentType.JSON);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);

El código anterior usa un objeto RestHighLevelClient para agregar un documento con ID 1 al índice llamado "my_index".

biblioteca cliente

Elasticsearch también proporciona bibliotecas de clientes en varios idiomas para que las aplicaciones puedan interactuar con Elasticsearch más fácilmente. El siguiente es un ejemplo de código para agregar la biblioteca de cliente de Elasticsearch mediante la API de Java:

<dependency>
  <groupId>org.elasticsearch.client</groupId>
  <artifactId>elasticsearch-rest-high-level-client</artifactId>
  <version>7.14.0</version>
</dependency>

El código anterior agrega la biblioteca de cliente elasticsearch-rest-high-level-client al proyecto Java.

Este es un ejemplo de una biblioteca cliente que usa código Java para agregar documentos a un índice de Elasticsearch:

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http")));
IndexRequest request = new IndexRequest("my_index");
request.id("1");
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("name", "John");
jsonMap.put("age", 30);
jsonMap.put("city", "New York");
request.source(jsonMap);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);

El código anterior usa el objeto RestHighLevelClient y la biblioteca del cliente de Elasticsearch para agregar un documento con ID 1 al índice llamado "my_index".

en conclusión

Este artículo describe cómo integrar Elasticsearch en aplicaciones utilizando la API REST y las bibliotecas de clientes en varios idiomas. Estos métodos permiten que las aplicaciones interactúen con Elasticsearch de manera más eficiente y habilitan funciones como la búsqueda y el análisis de datos. En aplicaciones prácticas, es necesario seleccionar un método de integración apropiado según los requisitos específicos.

Supongo que te gusta

Origin blog.csdn.net/Why_does_it_work/article/details/132178277
Recomendado
Clasificación