search - rodrigo - ¿Múltiples índices o múltiples tipos de mapeo para documentos dispersos?
manila filipinas (2)
ElasticSearch usará internamente un mapeo con 150-200 campos. Como ningún documento tiene un valor para cada campo, terminaré con una gran cantidad de datos dispersos.
Sí, los diferentes tipos dentro de un índice comparten la misma estructura de mapeo. Cada tipo solo tiene un campo "_type" para cada documento que se usa automáticamente para filtrar cuando se busca en un tipo específico.
¿Qué tan malos son los escasos documentos?
Citando del tipo Index Vs
Los campos que existen en un tipo también consumirán recursos para documentos de tipos en los que este campo no existe. Este es un problema general con los índices de Lucene: no les gusta la escasez.
¿Será mejor con un índice separado para cada tipo, aunque algunos índices solo contengan algunos documentos?
Como sabrá, cada índice separado tiene sus propios gastos generales y los tipos no se adaptan bien a los documentos dispersos.
Yo sugeriría
- Los tipos de documento con un número pequeño de documentos (con un gran número de campos dispersos) deberían ir a un índice separado, obviamente reduciendo el número de fragmentos al menor número posible, es decir 1. Cada índice tiene 5 fragmentos por defecto. Si su número de documentos no es tan grande, no tiene sentido utilizar 5 fragmentos y reducirá la carga en la consulta de búsqueda.
- Los tipos de documento que tienen campos significativos en común deben ir al mismo índice con diferentes tipos. Dependiendo de la cantidad total de documentos, es posible que desee aumentar la cantidad de ajustes de los fragmentos.
- Si algunos tipos de documentos tienen una gran cantidad de documentos, puede crear índices separados para ellos.
Tenga en cuenta que debe mantener una cantidad razonable de fragmentos en el clúster, lo que se puede lograr reduciendo la cantidad de fragmentos para los índices que no requieren un alto rendimiento de escritura y / o almacenan un número bajo de documentos.
Tengo ~ 10 tipos de documentos diferentes que comparten 10-15 campos comunes. Pero cada tipo de documento tiene campos adicionales, 3 de ellos hasta 30-40 campos adicionales.
Estaba considerando usar un tipo de mapeo diferente para cada tipo de documento. Pero si entiendo correctamente cómo funcionan las asignaciones, ElasticSearch usará internamente una asignación con 150-200 campos. Como ningún documento tiene un valor para cada campo, terminaré con una gran cantidad de datos dispersos.
De acuerdo con este artículo ( Índice vs. Tipo ) ElasticSearch es (¿era?) No muy bueno en el tratamiento de datos dispersos, por lo que sería un argumento para tener un índice separado para cada tipo de documento. Pero algunos tipos de documentos solo tienen muy pocos documentos, por lo que sería excesivo tener un índice separado para ellos.
Mi pregunta: ¿Qué tan malos son los documentos dispersos? ¿O estoy mejor con un índice separado para cada tipo aunque algunos índices solo contengan algunos documentos?
Hay varias implicaciones entre elegir un índice o un tipo. Depende de la potencia de cálculo de sus nodos, del número de documentos que almacenará cada tipo, etc.
Si dice que cada índice contendrá solo unos pocos documentos, le recomendaría ir con tipos, ya que cada índice terminará creando fragmentos separados, lo que sería una exageración para el pequeño conjunto de documentos.
También puede referirse a esta Respuesta SO .