Instalación de Docker y uso del motor de búsqueda Elasticsearch

1. ¿Qué es Elasticsearch?

Elasticsearch es un motor de análisis y búsqueda de código abierto distribuido basado en Lucene . Proporciona un motor de búsqueda de texto completo con capacidades distribuidas de múltiples usuarios, basado en la interfaz RESTful WEB . Elasticsearch está desarrollado en Java y lanzado como código abierto bajo los términos de la licencia de Apache . ¡Actualmente es un popular motor de búsqueda empresarial!

2. Docker instala Elasticsearch

Puede utilizar el siguiente comando para iniciar rápidamente Elasticsearch para desarrollo o pruebas:
1. Tira del espejo
docker pull elasticsearch:6.4.0
2. Ejecute el contenedor de instalación
docker run --name es -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d elasticsearch:6.4.0

# -d 表示在后台运行

# 也可以设置ES_JAVA_OPTS内存使用限制

3. Comprueba si está funcionando
docker ps

Inserte la descripción de la imagen aquí
Puedes ver que ya hay

Entonces probemos si podemos conectarnos a la entrada { IP del servidor }: 9200 Aparece el mensaje anterior, indicando éxito
Inserte la descripción de la imagen aquí

3. Docker instala el tokenizador IK

1. Ingrese al contenedor
docker exec -it es /bin/bash
2. Descargue e instale en línea
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.5.4/elasticsearch-analysis-ik-6.5.4.zip

Inserte la descripción de la imagen aquí

3. Ingrese a la carpeta de complementos para ver el tokenizador IK

Ik es un complemento de segmentación de palabras chinas. La segmentación de palabras chinas que viene con elasticSearch es muy poco profesional e ik soporta mejor la segmentación de palabras chinas.
Inserte la descripción de la imagen aquí

4. Instale el complemento de visualización Kibana

Se recomienda utilizar la misma versión de mirror 6.4.0 que elasticsearch (diferentes pueden causar problemas)

1. Descarga Kibana Mirror
docker pull kibana:6.4.0
2. Edite el archivo de configuración kibana.yml

El archivo de configuración kibana.yml se coloca en el directorio ** / data / elk / ** del host, y el contenido es el siguiente:

# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://(你的服务器IP):9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
3. Kibana
docker run –name kibana -p 5601:5601 -v /data/elk/kibana.yml:/usr/share/kibana/config/kibana.yml --restart=always -d kibana:6.4.0
4. Ver el estado de inicio del contenedor
docker ps

Inserte la descripción de la imagen aquí

5. Kibana dinámica

Visite http: // {IP del servidor}: 5601 (el inicio puede ser lento, si falla, espere unos segundos y luego intente actualizar)
Inserte la descripción de la imagen aquí

5. Uso de ES (consulta básica, consulta agregada

1. Cree una biblioteca de índices

La biblioteca de índices ES es un concepto lógico, que incluye una lista de segmentación de palabras y una lista de documentos El mismo tipo de documentos se almacenan en la misma biblioteca de índices. Es equivalente a una tabla en MySQL, o equivalente a una colección en Mongodb.
Acerca del término
índice : Índice (sustantivo): ES es un servicio de búsqueda basado en Lucene, que busca datos de índice elegibles de una biblioteca de índices.
Índice (verbo): la biblioteca de índices está vacía cuando se acaba de crear. El proceso de agregar datos a la biblioteca de índices se denomina indexación.
A continuación, se presentan dos métodos para crear una biblioteca de índices, que funcionan según el mismo principio, y ambos son el cliente que envía comandos al servicio ES.
1) Utilice herramientas como cartero o curl para crear:
ponga http: // localhost: 9200 / index library name

{
    
    
"settings":{
    
    
"index":{
    
    
"number_of_shards":1,
"number_of_replicas":0
  }
    }
      }

number_of_shards: establece la cantidad de fragmentos. Por lo general, se configuran varios fragmentos en el clúster, lo que significa que una biblioteca de índices se dividirá en varios fragmentos para almacenar diferentes nodos, lo que mejora la capacidad de procesamiento y la alta disponibilidad de ES. El programa de entrada utiliza un entorno independiente , Aquí se establece en 1.
number_of_replicas: establece el número de réplicas. La configuración de réplicas es para mejorar la alta confiabilidad de ES, y el entorno independiente se establece en 0. El
siguiente es un ejemplo de creación, creando la biblioteca de índice xc_course, un total de 1 fragmento, 0 réplicas:

  • Creado con el complemento head

    img

img

2 Crea un mapeo

2.1 Descripción del concepto

Cada documento en el índice incluye uno o más campos. Crear un mapeo es el proceso de crear un campo en la biblioteca de índices. La siguiente es una analogía entre el concepto de documento y campo y base de datos relacional:

Documento (Documento) ---------------- Registro de fila
Campo (Campo) ------------------- Columnas
Nota: 6.0 La versión anterior tiene el concepto de tipo. Tipo es equivalente a una tabla de base de datos relacional. Los funcionarios de ES eliminarán completamente el tipo en la versión ES9.0.
¿La biblioteca de índices mencionada anteriormente es equivalente a una base de datos o una tabla en una base de datos relacional?
1. Si es equivalente a una base de datos, significa que una biblioteca de índices puede crear muchos tipos diferentes de documentos, lo que también está permitido en ES.
2. Si es equivalente a una tabla, significa que una biblioteca de índices solo puede almacenar documentos del mismo tipo. ES oficialmente recomienda que solo los documentos del mismo tipo se almacenen en una biblioteca de índices.

2.2 Crear un mapeo

Queremos almacenar la información en ES. Aquí creamos el mapeo de la información. Primero, comencemos con un mapeo simple, como sigue:
send: post http: // localhost: 9200 / index library name / type name / _mapping para
crear un mapeo de tipo xc_course , Incluyendo tres campos: nombre, descripción, studymondel
Dado que la versión ES6.0 no ha eliminado completamente el tipo, el tipo no tiene un significado especial por el momento.
Solicitud de publicación: http: // localhost: 9200 / xc_course / doc / _mapping
significa: crear una asignación con el tipo de documento en la biblioteca de índices xc_course. doc es el nombre del tipo, que se puede personalizar. En ES6.0, el concepto de tipo debe debilitarse y darle un nombre sin un significado comercial específico.

{
    
    
"properties": {
    
    
"name": {
    
    
"type": "text"
},
"description": {
    
    
"type": "text"
},
"studymodel": {
    
    
"type": "keyword"
    }
  }
 }

El mapeo se creó con éxito, verifique la interfaz principal:

img

image.png

3. Crea un documento

Los documentos en ES son equivalentes a los registros en las tablas de la base de datos MySQL.
Enviar: poner o publicar http: // localhost: 9200 / xc_course / doc / id value
(si no se especifica el valor de id , ES generará automáticamente la ID)
http: // localhost: 9200 / xc_course / doc / 4028e58161bcf7f40161bcf8b77c0000

{
    
    
"name":"Bootstrap开发框架",
"description":"Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的精美界面效果。",
"studymodel":"201001"
}

Utilice cartero para probar:

img

Consultar datos a través de la cabeza:

img

4 Buscar documentos

1. Consultar el documento de acuerdo con el ID del curso
Enviar: obtener http: // localhost: 9200 / xc_course / doc / 4028e58161bcf7f40161bcf8b77c0000
Utilice cartero para probar:

img

2. Consultar todos los registros y
enviar get http: // localhost: 9200 / xc_course / doc / _search
3. Consultar los registros que incluyen la palabra clave spring en su nombre y
enviar: get http: // localhost: 9200 / xc_course / doc / _search? Q = nombre: bootstrap
4. Consultar el registro cuyo modo de aprendizaje es 201001 y
enviar get http: // localhost: 9200 / xc_course / doc / _search? q = studymodel: 201001

4.1 Análisis de los resultados de la consulta
{
    
    
    "took": 4,
    "timed_out": false,
    "_shards": {
    
    
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
    
    
        "total": 1,
        "max_score": 1,
        "hits": [
            {
    
    
                "_index": "xc_course",
                "_type": "doc",
                "_id": "4028e58161bcf7f40161bcf8b77c0000",
                "_score": 1,
                "_source": {
    
    
                    "name": "Bootstrap开发框架",
                    "description": "Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的精美界面效果。",
                    "studymodel": "201001"
                }
            }
        ]
    }
}

tomó: El tiempo empleado en esta operación, en milisegundos.
timed_out: Si la solicitud ha caducado
colección _Fragmentos: indicar qué fragmentos se buscó para esta operación
hits: los éxitos sin precedentes en la búsqueda
hits.total: el número total de documentos que cumplan las condiciones hits.hits: los documentos arriba N con mayor grado de adaptación
hits.max_score: documentos Puntaje de coincidencia, aquí está el puntaje más alto
_puntuación: cada documento tiene una puntuación de coincidencia, ordenada en orden descendente.
_source: muestra el contenido original del documento.

5 Tipo de mapeo

1. Método de mantenimiento de mapas

1. Consulte la asignación de todos los índices:
GET: http: // localhost: 9200 / _mapping
2. Cree una
solicitud de publicación de asignación : http: // localhost: 9200 / xc_course / doc / _mapping
Un ejemplo:

{
    
    
"properties": {
    
    
"name": {
    
    
"type": "text"
},
"description": {
    
    
"type": "text"
},
"studymodel": {
    
    
"type": "keyword"
    }
  }
}

3. Actualice la asignación.
Se pueden agregar nuevos campos después de que la asignación se haya creado correctamente y los campos existentes no se pueden actualizar.
4. Eliminar la asignación Elimine la asignación
eliminando el índice.

2. Tipos de mapas comunes

2.1 campo de texto de texto

La cadena incluye dos tipos: texto y palabra clave:
1. texto
1) El analizador
especifica el tokenizador a través del atributo del analizador.
El tipo de campo del nombre especificado a continuación es texto y se utiliza el modo de segmentación de palabras ik_max_word del tokenizador ik.

"name": {
    
    
"type": "text",
"analyzer":"ik_max_word"
}

El analizador especificado anteriormente significa que ik_max_word se usa tanto en la indexación como en la búsqueda. Si desea definir el segmentador de palabras usado en la búsqueda por separado, puede usar el atributo search_analyzer.

La sugerencia para ik tokenizer es usar ik_max_word para la segmentación detallada de palabras del contenido de búsqueda al indexar, y usar ik_smart para buscar para mejorar la precisión de la búsqueda

"name": {
    
    
"type": "text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_smart"
}

2) índice
especifica si indexar a través del atributo de índice.
El valor predeterminado es index = true, es decir, se requiere indexación y solo se puede buscar indexación desde la biblioteca de índices.
Sin embargo, también hay algunos contenidos que no necesitan ser indexados. Por ejemplo, la dirección de la imagen del producto solo se usa para mostrar la imagen y no buscarla. En este caso, puede establecer el índice
en falso.
Elimine el índice, vuelva a crear el mapeo, establezca el índice de la imagen en falso e intente buscar en función de la imagen, pero no se encuentran datos

pic": {
"type": "text",
"index":false
}

3)
Si la tienda se almacena fuera de la fuente. Después de indexar cada documento, se guardará una copia del documento original en "_source". Por lo general, no es necesario establecer la tienda en verdadero porque ya hay una copia en _source El documento original.

2.2 campo de palabra clave

El campo de texto introducido anteriormente requiere un segmentador de palabras al mapear. El campo de palabra clave es un campo de palabra clave. Generalmente, la palabra clave de búsqueda se basa en la búsqueda general. Por lo tanto, al crear el índice del campo de palabra clave, no se realiza la segmentación de palabras, como: código postal, número de teléfono móvil, Tarjeta de identificación, etc. El campo de palabras clave se usa generalmente para filtrar, ordenar, agregar, etc.

2.3 fecha tipo de fecha

No es necesario configurar un tokenizador para el tipo de fecha.
Por lo general, los campos de tipo de fecha se utilizan para ordenar.
1)
Formato establece el formato de fecha a través del formato
Ejemplo: Las
siguientes configuraciones permiten que el campo de fecha almacene tres formatos: año, mes, día, hora, minuto, segundo, año, mes, día y milisegundo.

{
    
    
"properties": {
    
    
"timestamp": {
    
    
"type": "date",
"format": "yyyy‐MM‐dd HH:mm:ss||yyyy‐MM‐dd"
    }
  }
}
2.4 Tipo numérico

A continuación, se muestran los tipos numéricos admitidos por ES.
1. Intente elegir un tipo con un rango pequeño para mejorar la eficiencia de la búsqueda.
2. Para números de punto flotante, intente utilizar un factor de escala, como un campo de precio con una unidad de yuan. Estableceremos el factor de escala en 100. Esto estará en ES Almacenado por puntos, el mapeo es el siguiente:

"price": {
    
    
"type": "scaled_float",
"scaling_factor": 100
}

Dado que el factor de escala es 100, si el precio que ingresamos es 23,45, el ES multiplicará 23,45 por 100 y lo almacenará en ES.
Si el precio ingresado es 23,456, ES multiplicará 23,456 por 100 y luego tomará un número cercano al valor original para obtener 2346.
La ventaja de utilizar un factor de escala es que los tipos enteros son más fáciles de comprimir que los tipos de coma flotante, lo que ahorra espacio en disco.

Supongo que te gusta

Origin blog.csdn.net/Cursh_programmer/article/details/111567169
Recomendado
Clasificación