Cómo utilizar elasticsearch 5.2 para implementar la indexación de texto completo
ElasticSearch es un servidor de búsqueda basado en Lucene. Proporciona un motor de búsqueda de texto completo con funcionalidad distribuida multiusuario, basado en una interfaz web RESTful. Desarrollado en Java y lanzado como código abierto según los términos de la licencia Apache, Elasticsearch es el segundo motor de búsqueda empresarial más popular. Realiza búsquedas en tiempo real, es estable, confiable, rápido, fácil de instalar y usar, no tiene configuración y es completamente gratuito.
Comencemos con los conceptos básicos de ES.
1. Índice (Index)
ES almacena datos en uno o más índices. Un índice es una colección de documentos con características similares. Al igual que los campos de bases de datos relacionales tradicionales, los índices son equivalentes a bases de datos o procedimientos de almacenamiento de datos (esquemas) en SQL.
Un índice se identifica por su nombre (que debe estar compuesto exclusivamente por letras minúsculas) y se hace referencia a él en las operaciones de creación, búsqueda, actualización y eliminación de documentos. En un clúster ES, puede crear tantos índices como necesite.
2. Tipo (Tipo)
El tipo es una partición lógica (categoría/partición) en el índice, pero su significado depende completamente de las necesidades del usuario. Por tanto, un índice puede definir uno o más tipos. Generalmente, los tipos están predefinidos para documentos con el mismo dominio.
Por ejemplo, en un índice, puede definir un tipo para almacenar datos de usuario, un tipo para almacenar datos de registro y un tipo para almacenar datos de comentarios. Los tipos son equivalentes a "tablas" en los dominios de bases de datos relacionales tradicionales.
3. Documento (Documento)
El documento es la unidad atómica de indexación y búsqueda de Lucene. Es un contenedor que contiene uno o más campos, representados en formato JSON.
Un documento consta de uno o más campos, cada uno con un nombre y uno o más campos con múltiples valores a menudo se denominan "campos multivalor". Cada documento puede almacenar un conjunto diferente de dominios, pero los documentos del mismo tipo deben tener cierto grado de similitud.
4. Mapeo
ES, todos los documentos deben ser analizados antes de su almacenamiento. Los usuarios pueden definir cómo dividir el texto en tokens, qué tokens deben filtrarse, qué texto necesita procesamiento adicional, etc.
Además, ES proporciona otras funciones, como ordenar el contenido en el dominio según demanda. De hecho, ES también puede determinar automáticamente el tipo de campo en función del valor del campo.
5. Clúster
El clúster ES es una colección de uno o más nodos que almacenan todo el conjunto de datos y proporcionan indexación federada y función de búsqueda entre nodos.
Un clúster formado por varios nodos tiene capacidades de redundancia para garantizar la disponibilidad general del servicio en caso de fallo de uno o más nodos.
Un clúster se identifica por su nombre único, que por defecto es "elasticsearch". Un nodo determina a qué clúster ES se une en función del nombre de su clúster, y un nodo solo puede pertenecer a un clúster.
Si no se consideran la redundancia y otras características, un clúster ES con un solo nodo puede realizar todas las funciones de almacenamiento y búsqueda.
6. Nodo
El host ES que ejecuta una sola instancia se llama nodo. Es miembro del clúster y puede almacenar datos, participar en operaciones de búsqueda y indexación del clúster.
Al igual que un clúster, un nodo se identifica por su nombre, que por defecto es un nombre aleatorio de personaje de Marvel que se genera automáticamente al inicio.
Los usuarios pueden personalizar cualquier nombre, pero para fines administrativos el nombre debe ser lo más identificable posible.
Un nodo identifica el clúster al que se une por el nombre del clúster ES con el que está configurado.
7. Fragmentación y replicación
El mecanismo de "fragmentación" de ES puede distribuir los datos del índice a múltiples nodos dividiendo el índice en múltiples capas físicas de Lucene. Para ello, divide un índice en múltiples índices físicos subyacentes de Lucene, donde cada índice se denomina fragmento.
Cada fragmento es internamente un índice independiente completamente funcional y, por lo tanto, puede ser almacenado por cualquier host del clúster. Al crear un índice, el usuario puede especificar la cantidad de fragmentos, que por defecto es 5.
Un clúster ES puede constar de varios nodos en los que se almacenan fragmentos de forma distribuida.
ES puede mover automáticamente fragmentos entre nodos según sea necesario, como cuando se agregan nodos o cuando fallan. En resumen, la fragmentación implementa el almacenamiento distribuido del clúster, mientras que las réplicas implementan sus capacidades de redundancia y procesamiento distribuido.
Bien, los conceptos y principios básicos de ES se han presentado anteriormente, entonces, ¿cómo implementa ES la búsqueda de texto completo?
Para implementar la recuperación de texto completo en Elasticsearch, primero debe determinar el segmentador de palabras. ES tiene muchos segmentadores de palabras predeterminados. Puede consultar la documentación oficial. Comprender cómo se implementa principalmente el léxico.
En general, los tesauros chinos utilizan tesauros ik, tesauros mmsegf y tesauros paoding de terceros. Es posible que estos tesauros se hayan creado inicialmente en Lucene y luego se hayan trasplantado a ES. En la actualidad, estamos en la última versión de ES. , se utiliza el diccionario IK.
Instalar el vocabulario IK en elasticsearch es muy sencillo. Tiene un directorio de complementos de análisis-ik y un directorio de configuración ik que puede copiar en los directorios de complementos y conf respectivamente.
Cuando tiene una gran cantidad de datos de texto, ES dividirá los datos en palabras y las guardará en el índice. Cuando ingrese una consulta de palabra clave, el índice funcionará y encontrará las mismas palabras de consulta correspondientes. por lo tanto Implemente la búsqueda de texto completo. Por supuesto, este proceso requiere mucha memoria.