Resumen de notas de estudio de ElasticSearch

Introducción a ElasticSearch

¿Qué es ElasticSearch?

ElaticSearch, abreviado como es, es es un motor de búsqueda de texto completo distribuido de código abierto y altamente expandible que puede almacenar y recuperar datos casi en tiempo real; tiene una buena escalabilidad y se puede extender a cientos de servidores para procesar datos de nivel PB. es también utiliza el desarrollo de Java y Lucene como su núcleo para implementar todas las funciones de indexación y búsqueda, pero su propósito es ocultar la complejidad de Lucene a través de una API RESTful simple, haciendo así la búsqueda de texto completo simple.

ElasticSearch frente a Solr

  • Solr usa Zookeeper para la administración distribuida, mientras que Elasticsearch tiene funciones de coordinación y administración distribuidas;
  • Solr admite más formatos de datos, mientras que Elasticsearch solo admite el formato de archivo json;
  • Solr ofrece oficialmente más funciones, mientras que Elasticsearch presta más atención a las funciones principales, y la mayoría de las funciones avanzadas son proporcionadas por complementos de terceros;
  • Solr funciona mejor que Elasticsearch en aplicaciones de búsqueda tradicionales, pero es significativamente menos eficiente que Elasticsearch cuando se trata de aplicaciones de búsqueda en tiempo real.

¿Qué es la búsqueda de texto completo?

Búsqueda de texto completo: extrae parte de la información de los datos no estructurados, reorganízala para que tenga una determinada estructura y luego busca los datos con una determinada estructura, para lograr el propósito de una búsqueda relativamente rápida.

Por ejemplo, un programa informático de indexación escanea cada palabra del artículo y construye un índice para cada palabra, indicando el número y posición de la palabra en el artículo. Cuando el usuario consulta, el programa de búsqueda buscará de acuerdo con el índice establecido de antemano. Y el resultado de la búsqueda se retroalimenta al método de búsqueda del usuario. Este proceso es similar al proceso de buscar caracteres a través de la lista de palabras de búsqueda en un diccionario.

Escenarios de la aplicación ElasticSearch

  1. Wikipedia, similar a Baidu Baike, pasta de dientes, Wikipedia similar a una pasta de dientes, búsqueda de texto completo, resaltado, recomendación de búsqueda.
  2. The Guardian (sitio web de noticias extranjeras), similar a Sohu News, registros de comportamiento del usuario (clics, navegaciones, favoritos, comentarios) + datos de redes sociales (opiniones relevantes sobre noticias XX), análisis de datos y proporciona al autor de cada artículo de noticias, Hágale saber los comentarios del público (buenos, malos, populares, basura, desprecio, admiración) de su artículo.
  3. Stack Overflow (foro de discusión de excepción de programa externo), preguntas de TI, errores del programa, envíelos, alguien discutirá y responderá con usted, búsqueda de texto completo, búsqueda de preguntas y respuestas relacionadas, si el programa informa un error, la información del error se pegará en él Ve y busca la respuesta correspondiente.
  4. GitHub (gestión de código fuente abierto), busca cientos de miles de millones de líneas de código.
  5. Nacional: búsqueda de sitios (comercio electrónico, contratación, portal, etc.), búsqueda de sistemas de TI (OA, CRM, ERP, etc.), análisis de datos (un escenario de uso popular para ES).

Instalación y puesta en marcha de ElasticSearch

Instalar ES

La dirección oficial de ElasticSearch: https://www.elastic.co/products/elasticsearch

  1. Descargue el paquete comprimido del sitio web oficial

  2. Descomprima, ingrese al directorio bin, haga clic en elasticsearch.bat para comenzar, la información de registro que se muestra en la consola es la siguiente:

    imagen-20200324204405635
    Nota: 9300 es el puerto de comunicación tcp, que se ejecuta entre clústeres y TCPClient, y 9200 es la interfaz RESTful del protocolo http.

  3. Ingrese localhost: 9200 a través del navegador para acceder al servidor ElasticSearch y vea la información json devuelta de la siguiente manera, lo que indica que el servicio se inició correctamente:

Inserte la descripción de la imagen aquí

Nota: ElasticSearch se desarrolla usando java, y la versión de jdk requerida para esta versión de es es 1.8 o superior, así que antes de instalar ElasticSearch, asegúrese de que JDK1.8 + esté instalado y las variables de entorno de JDK estén configuradas correctamente, de lo contrario, el inicio de ElasticSearch fallará.

Instale el complemento de interfaz gráfica de ES

ElasticSearch es diferente de la propia interfaz gráfica de Solr. Al instalar el plug-in principal de ElasticSearch, podemos completar el efecto de la interfaz gráfica y completar la vista de los datos del índice. Hay dos formas de instalar complementos, instalación en línea e instalación local. Este documento utiliza el método de instalación local para instalar el complemento principal. La instalación del cabezal en elasticsearch-5- * y versiones superiores requiere la instalación de node y gruñido.

Dirección del sitio web oficial del complemento: https://github.com/mobz/elasticsearch-head

Se recomienda usar Docker para instalar, que es más conveniente y ejecutar el comando:

docker run -p 9100:9100 --name es-head mobz/elasticsearch-head:5

Después del inicio, ingrese: localhost: 9100 en el navegador para ver la interfaz visual.

Nota:

CORS debe estar habilitado en elasticsearch; de lo contrario, el navegador rechazará las solicitudes de elasticsearch-head debido a la violación de la política del mismo origen

Si no puede conectarse correctamente al servicio es, debe modificar el archivo de configuración en el directorio de configuración de ElasticSearch: config / elasticsearch.yml y agregar los dos comandos siguientes:

Habilitar CORS en elasticsearch

http.cors.enabled: true 
http.cors.allow‐origin: "*"

Luego reinicie el servicio ElasticSearch y podrá conectarse normalmente.

Conceptos (términos) relacionados con ElasticSearch

Visión general

Elasticsearch está orientado a documentos, lo que significa que puede almacenar objetos o documentos completos. Sin embargo, no se trata solo de almacenamiento, también indexa el contenido de cada documento para que se pueda buscar. En Elasticsearch, puede indexar, buscar, ordenar y filtrar documentos.

Elasticsearch compara las bases de datos relacionales tradicionales de la siguiente manera:

Relational DB ‐> Databases ‐> Tables  ‐>  Rows      ‐> Columns
Elasticsearch ‐> Indices   ‐> Types   ‐>  Documents ‐> Fields

Conceptos básicos de Elasticsearch

Índice

Un índice es una colección de documentos con características similares .

Por ejemplo: puede tener un índice para los datos de los clientes, un índice para un catálogo de productos y un índice para los datos de los pedidos.

Un índice se identifica por un nombre (debe ser todo en minúsculas), y cuando queremos indexar, buscar, actualizar y eliminar documentos en este índice, debemos usar este nombre .

En un clúster, se puede definir cualquier número de índices. Puede entender el índice como una base de datos.

Tipo

En un índice, puede definir uno o más tipos .

Un tipo es una clasificación / partición lógica de su índice, y su semántica depende completamente de usted **. **

Por ejemplo, supongamos que ejecuta una plataforma de blogs y almacena todos sus datos en un índice. En este índice, puede definir un tipo para los datos del usuario, un tipo para los datos del blog y un tipo para los datos de los comentarios.

Por lo general, un tipo se define para un documento con un conjunto de campos comunes y el tipo se puede entender como una tabla .

Documento

Un documento es una unidad de información básica que se puede indexar y es la unidad de datos más pequeña en ES . El documento está representado en formato JSON.

Por ejemplo, puede tener un documento para un cliente determinado, un documento para un producto determinado,

En un índice / tipo, puede almacenar tantos documentos como desee. Tenga en cuenta que, aunque un documento existe físicamente en un índice, el documento debe estar indexado / dado un tipo de índice.

Puede entenderse como una fila de datos en los datos.

Campo

Es equivalente al campo de la tabla de datos, que clasifica e identifica los datos del documento según diferentes atributos.

Puede entenderse como una columna en la base de datos.

Cartografía

El mapeo consiste en establecer algunas restricciones sobre la forma y las reglas de procesamiento de datos, como el tipo de datos de un campo, el valor predeterminado, el analizador, si se indexará, etc. Estas son todas las configuraciones que se pueden establecer en el mapeo, y las otras son algunos de los datos en e. El uso de la configuración de reglas también se llama mapeo. El procesamiento de datos de acuerdo con las reglas óptimas mejora en gran medida el rendimiento. Por lo tanto, es necesario establecer un mapeo, y es necesario pensar en cómo establecer un mapeo para lograr un mejor rendimiento.

NRT casi en tiempo real

Elasticsearch es una plataforma de búsqueda casi en tiempo real. Esto significa que hay una pequeña demora desde la indexación de un documento hasta que se puede buscar (generalmente en 1 segundo)

Racimo

Un clúster está organizado por uno o más nodos, que juntos contienen todos los datos y proporcionan funciones de índice y búsqueda juntas. Un clúster se identifica con un nombre único, que es "elasticsearch" de forma predeterminada.

Este nombre es importante porque un nodo solo puede unirse al clúster especificando el nombre de un clúster.

Nodo

Un nodo es un servidor en el clúster. Como parte del clúster, almacena datos y participa en las funciones de indexación y búsqueda del clúster. Al igual que en un clúster, un nodo también se identifica por un nombre. De forma predeterminada, este nombre es el nombre de un personaje de cómic de Marvel aleatorio. Este nombre se asignará al nodo cuando se inicie. Este nombre es muy importante para el trabajo de administración, porque en este proceso de administración, determinará qué servidores de la red corresponden a qué nodos en el clúster de Elasticsearch.

Un nodo puede unirse a un clúster específico configurando el nombre del clúster. De forma predeterminada, cada nodo se organizará para unirse a un clúster llamado "elasticsearch", lo que significa que si inicia varios nodos en su red y asume que pueden descubrirse entre sí, automáticamente Formar y unirse a un cluster llamado "elasticsearch".

En un clúster, puede tener tantos nodos como desee. Además, si actualmente no hay nodos Elasticsearch ejecutándose en su red, inicie un nodo en este momento y se creará y agregará un clúster llamado "elasticsearch" de forma predeterminada.

Fragmentos y réplicas de fragmentación y replicación

Un índice puede almacenar una gran cantidad de datos más allá del límite de hardware de un solo nodo. Por ejemplo, un índice con mil millones de documentos ocupa 1 TB de espacio en disco y ningún nodo tiene un espacio de disco tan grande; o un solo nodo procesa las solicitudes de búsqueda y responde con demasiada lentitud. Para resolver este problema, Elasticsearch ofrece la capacidad de dividir el índice en varias partes, que se denominan fragmentos. Cuando crea un índice, puede especificar la cantidad de fragmentos que desea. Cada fragmento en sí mismo es también un "índice" completamente funcional e independiente, este "índice" se puede colocar en cualquier nodo del clúster.

La fragmentación es muy importante por dos razones principales:

1) Le permite dividir / expandir su capacidad de contenido horizontalmente.

2) Le permite realizar operaciones distribuidas y paralelas en fragmentos (potencialmente en varios nodos) para mejorar el rendimiento / rendimiento.

En cuanto a cómo se distribuye un fragmento y cómo se agregan sus documentos a las solicitudes de búsqueda, Elasticsearch lo administra completamente, que es transparente para usted como usuario.

En un entorno de red / nube, la falla puede ocurrir en cualquier momento. Un determinado fragmento / nodo está fuera de línea por algún motivo o desaparece por cualquier motivo. En este caso, un mecanismo de conmutación por error es muy útil. Y es muy recomendable. Para este propósito, Elasticsearch le permite crear una o más copias de un fragmento. Estas copias se denominan fragmentos replicados o simplemente replicaciones.

Hay dos razones principales por las que la replicación es importante: Proporciona alta disponibilidad en caso de falla del fragmento / nodo. Por esta razón, es muy importante tener en cuenta que el fragmento replicado nunca se coloca en el mismo nodo que el fragmento original / primario. Amplíe su volumen / rendimiento de búsqueda, porque las búsquedas se pueden ejecutar en paralelo en todas las réplicas. En resumen, cada índice se puede dividir en múltiples fragmentos. Un índice también se puede copiar 0 veces (lo que significa que no se puede copiar) o varias veces. Una vez replicado, cada índice tiene una diferencia entre el fragmento principal (el fragmento original como fuente de replicación) y el fragmento replicado (la copia del fragmento principal). El número de fragmentos y replicaciones se puede especificar cuando se crea el índice. Una vez creado el índice, puede cambiar dinámicamente el número de replicaciones en cualquier momento, pero no puede cambiar el número de fragmentos posteriormente.

De forma predeterminada, cada índice en Elasticsearch está fragmentado con 5 fragmentos primarios y 1 replicación, lo que significa que si su clúster tiene al menos dos nodos, su índice tendrá 5 fragmentos primarios y Hay otros 5 fragmentos replicados (1 copia completa), por lo que hay un total de 10 fragmentos por índice.

ElasticSearch y analogía de base de datos

Base de datos relacional (como Mysql) Base de datos no relacional (Elasticsearch)
Base de datos Índice
Mesa Tipo Tipo (después de la versión 6.0, solo puede haber uno debajo de un índice, el tipo se cancela después de la versión 7.0)
Fila de datos Documento (formato JSON)
Columna Campo
Esquema de restricción Cartografía

Uso integrado de tokenizer IK y ElasticSearch

Instalar tokenizador IK

Enlace de descarga: https://github.com/medcl/elasticsearch-analysis-ik/releases

  1. Vaya al sitio web oficial para descargar el paquete comprimido
  2. Descomprima, copie la carpeta elasticsearch descomprimida a elasticsearch-5.6.8 \ plugins y cambie el nombre de la carpeta a analysis-ik
  3. Reinicie ElasticSearch para cargar el tokenizador IK

Prueba de tokenizador IK

IK proporciona algoritmos de segmentación de dos palabras ik_smart e ik_max_word

  • ik_smart es la segmentación más pequeña,

  • ik_max_word es la división más detallada

Prueba de segmentación mínima:

Dirección de entrada del navegador:

http://127.0.0.1:9200/_analyze?analyzer=ik_smart&pretty=true&text=我是程序员

[Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo de enlace anti-sanguijuela. Se recomienda guardar la imagen y subirla directamente (img-JWE3bTYp-1596695634328) (https://tva1.sinaimg.cn/large/00831rSTly1gd5d9l4gstj31400swgpt.jpg)]

Pruebe la segmentación más pequeña: ingrese la dirección en la barra de direcciones del navegador:

http://127.0.0.1:9200/_analyze?analyzer=ik_max_word&pretty=true&text=我是程序员

imagen-20200324220451130

Conceptos relacionados del clúster ElasticSearch

El clúster ES es un sistema distribuido de tipo P2P (que usa el protocolo de chismes). Excepto para la administración del estado del clúster, todas las demás solicitudes se pueden enviar a cualquier nodo del clúster. Este nodo puede averiguar a qué nodos necesita reenviar y Comunicarse directamente con estos nodos. Por lo tanto, en términos de arquitectura de red y configuración de servicios, la configuración requerida para construir un clúster es extremadamente simple. Antes de Elasticsearch 2.0, bajo una red sin obstáculos, todos los nodos configurados con el mismo cluster.name pertenecen automáticamente a un cluster. Después de la versión 2.0, basado en consideraciones de seguridad para evitar los problemas causados ​​por el entorno de desarrollo de manera demasiado casual, a partir de la versión 2.0, el método de descubrimiento automático predeterminado se ha cambiado a unidifusión. Las direcciones de varios nodos se proporcionan en la configuración, y ES las considera como la función del enrutador de chismes para completar el descubrimiento del clúster. Dado que esta es solo una función pequeña en ES, la función del enrutador de chismes no necesita configurarse por separado, y cada nodo de ES puede asumirla. Por lo tanto, en un clúster de unidifusión, cada nodo se puede configurar con la misma lista de nodos que el enrutador.

No hay límite para el número de nodos en un clúster. Generalmente, dos o más nodos pueden considerarse como un clúster. Generalmente, considerando el alto rendimiento y la alta disponibilidad, la cantidad de nodos en un clúster general es 3 o más.

Construcción de clústeres

  1. Prepare tres servidores de elasticsearch

Cree una carpeta elasticsearch-cluster y copie tres servicios de elasticsearch internamente

  1. Modificar la configuración de cada servidor

Modifique el archivo de configuración elasticsearch-cluster \ node * \ config \ elasticsearch.yml

nodo nodo1:

 #节点1的配置信息:
#集群名称,保证唯一
cluster.name: my‐elasticsearch
#节点名称,必须不一样
node.name: node‐1
#必须为本机的ip地址
network.host: 127.0.0.1
#服务端口号,在同一机器下必须不一样
http.port: 9200
#集群间通信端口号,在同一机器下必须不一样
transport.tcp.port: 9300
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]

nodo nodo2:

#节点2的配置信息:
#集群名称,保证唯一
cluster.name: my‐elasticsearch
#节点名称,必须不一样
node.name: node‐2
#必须为本机的ip地址
network.host: 127.0.0.1
#服务端口号,在同一机器下必须不一样
http.port: 9201
#集群间通信端口号,在同一机器下必须不一样
transport.tcp.port: 9301
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]

nodo nodo3:

#节点3的配置信息:
#集群名称,保证唯一
cluster.name: my‐elasticsearch
#节点名称,必须不一样
node.name: node‐3
#必须为本机的ip地址
network.host: 127.0.0.1
#服务端口号,在同一机器下必须不一样
http.port: 9202
#集群间通信端口号,在同一机器下必须不一样
transport.tcp.port: 9302
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300","127.0.0.1:9301","127.0.0.1:9302"]
  1. Simplemente inicie tres nodos.
  2. Use elasticsearch-header para ver el estado del clúster

imagen-20200806143316239

Operación de programación ElasticSearch

Spring Data ElasticSearch 使用

Spring Data ElasticSearch simplifica la operación elasticSearch basada en la API de datos de Spring y encapsula la API del cliente de la operación elasticSearch original. Spring Data proporciona un motor de búsqueda integrado para el proyecto Elasticsearch. Spring Data Elasticsearch El modelo centrado en el área funcional clave de POJO interactúa con los documentos de Elastichsearch y escribe fácilmente una capa de acceso a los datos del repositorio.

cómo utilizar

  1. Presentar a Maven
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
  1. Coloque application.yml

    server:
      port: 8080
    spring:
      application:
        name: elastic-search-service
      # 配置es
      data:
        elasticsearch:
          cluster-name: elasticsearch
          cluster-nodes: localhost:9300
    
    
  2. Escribiendo Pojo

    package com.hg.model;
    
    import lombok.Data;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.elasticsearch.annotations.Document;
    import org.springframework.data.elasticsearch.annotations.Field;
    import org.springframework.data.elasticsearch.annotations.FieldType;
    
    /**
     * @Author skh
     * @Date 2020/3/25 19:40
     * @Desc
     */
    @Data
    //指定索引名称和type名称
    @Document(indexName = "index_blog", type = "article")
    public class Article {
    
        @Id
        //定义字段类型,是否存储,是否分词
        @Field(type = FieldType.Long, store = true)
        private Long id;
    
        @Field(type = FieldType.Text, store = true, analyzer = "ik_smart")
        private String title;
    
        @Field(type = FieldType.Text, store = true, analyzer = "ik_smart")
        private String content;
    }
    
    
    1. Escriba la interfaz del repositorio para heredar ElasticsearchRepository

      public interface ArticleRepository extends ElasticsearchRepository<Article,Long> {
      
          List<Article> findByTitle(String title);
      }
      
      
  3. Utilice ArticleRepository para realizar la función de adición, eliminación, modificación y verificación de es.

  4. También puede inyectar ElasticsearchTemplate para realizar la función de adición, eliminación, modificación y consulta.

Supongo que te gusta

Origin blog.csdn.net/kaihuishang666/article/details/107838836
Recomendado
Clasificación