private void CreateBulkContentForChildDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping,
                                                       EntityContextInfo item)
        {
            var childMapping =
                _elasticsearchSerializerConfiguration.ElasticsearchMappingResolver.GetElasticSearchMapping(item.EntityType);

            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName("index");
            // Write the batch "index" operation header
            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            // Always write to the same index
            WriteValue("_index", childMapping.GetIndexForType(entityInfo.EntityType));
            WriteValue("_type", childMapping.GetDocumentType(item.EntityType));
            WriteValue("_id", item.Id);
            WriteValue("_parent", item.RoutingDefinition.ParentId);
            if (item.RoutingDefinition.RoutingId != null && _elasticsearchSerializerConfiguration.UserDefinedRouting)
            {
                // It's a document which has a specific route
                WriteValue("_routing", item.RoutingDefinition.RoutingId);
            }
            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteRaw("\n"); //ES requires this \n separator
            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            childMapping.MapEntityValues(item, _elasticsearchCrudJsonWriter, true);

            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteRaw("\n");
        }
Exemplo n.º 2
0
 /// <summary>
 /// You can add custom Type handlers here for specific mapping.
 /// Only one mapping can be defined pro type.
 /// </summary>
 /// <param name="type">Type of class</param>
 /// <param name="mapping">mapping definition.</param>
 public void AddElasticSearchMappingForEntityType(Type type, ElasticsearchMapping mapping)
 {
     if (_mappingDefinitions.ContainsKey(type))
     {
         throw new Exception("The mapping for this type is already defined.");
     }
     _mappingDefinitions.Add(type, mapping);
 }
Exemplo n.º 3
0
 private void ProccessPropertyMappingsWithoutTypeName(ElasticsearchCrudJsonWriter elasticsearchCrudJsonWriter, EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping)
 {
     //"properties": {
     elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName("properties");
     elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
     elasticsearchMapping.MapEntityValues(entityInfo, elasticsearchCrudJsonWriter, true, CreatePropertyMappings);
     elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
 }
Exemplo n.º 4
0
        /// <summary>
        /// Create a new mapping for the child type in the parent document index
        /// </summary>
        /// <param name="entityInfo"></param>
        /// <param name="elasticsearchMapping"></param>
        /// <param name="item"></param>
        /// <param name="mappingDefinition">definition for the type mappings</param>
        private void CreatePropertyMappingForChildDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping, EntityContextInfo item, MappingDefinition mappingDefinition)
        {
            var childMapping =
                _elasticsearchSerializerConfiguration.ElasticsearchMappingResolver.GetElasticSearchMapping(item.EntityType);

            var parentMapping =
                _elasticsearchSerializerConfiguration.ElasticsearchMappingResolver.GetElasticSearchMapping(item.ParentEntityType);

            var childType  = childMapping.GetDocumentType(item.EntityType);
            var parentType = parentMapping.GetDocumentType(item.ParentEntityType);

            var processedId = childType + "_" + parentType;

            if (_processedItems.Contains(childType))
            {
                var test = CommandTypes.Find(t => t.StartsWith(childType));
                if (test != processedId)
                {
                    throw new ElasticsearchCrudException("InitMappings: Not supported, child documents can only have one parent");
                }
                return;
            }
            _processedItems.Add(childType);
            CommandTypes.Add(processedId);

            var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();

            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName(childType);
            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            mappingDefinition.Source.WriteJson(elasticsearchCrudJsonWriter);
            mappingDefinition.All.WriteJson(elasticsearchCrudJsonWriter);
            mappingDefinition.Analyzer.WriteJson(elasticsearchCrudJsonWriter);

            CreateParentMappingForDocument(
                elasticsearchCrudJsonWriter,
                elasticsearchMapping.GetDocumentType(item.ParentEntityType));

            if (item.RoutingDefinition.RoutingId != null && _elasticsearchSerializerConfiguration.UserDefinedRouting)
            {
                CreateForceRoutingMappingForDocument(elasticsearchCrudJsonWriter);
            }

            ProccessPropertyMappingsWithoutTypeName(elasticsearchCrudJsonWriter, item, childMapping);
            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            CreateMappingCommandForTypeWithExistingIndex(elasticsearchCrudJsonWriter.GetJsonString(), elasticsearchMapping.GetIndexForType(entityInfo.EntityType), childMapping.GetDocumentType(item.EntityType));
        }
Exemplo n.º 5
0
        /// <summary>
        /// Create a new index for the parent document
        /// </summary>
        /// <param name="entityInfo"></param>
        /// <param name="elasticsearchMapping"></param>
        /// <param name="mappingDefinition">mapping definitions for the index type</param>
        private void CreatePropertyMappingForEntityForParentDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping, MappingDefinition mappingDefinition)
        {
            var itemType = elasticsearchMapping.GetDocumentType(entityInfo.EntityType);

            if (_processedItems.Contains("_mapping" + itemType))
            {
                return;
            }
            _processedItems.Add("_mapping" + itemType);

            var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();

            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName(itemType);
            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            mappingDefinition.Source.WriteJson(elasticsearchCrudJsonWriter);
            mappingDefinition.All.WriteJson(elasticsearchCrudJsonWriter);
            mappingDefinition.Analyzer.WriteJson(elasticsearchCrudJsonWriter);

            if (entityInfo.RoutingDefinition.RoutingId != null && _elasticsearchSerializerConfiguration.UserDefinedRouting)
            {
                CreateForceRoutingMappingForDocument(elasticsearchCrudJsonWriter);
            }

            if (entityInfo.RoutingDefinition.ParentId != null)
            {
                CreateParentMappingForDocument(
                    elasticsearchCrudJsonWriter,
                    elasticsearchMapping.GetDocumentType(entityInfo.ParentEntityType));
            }

            ProccessPropertyMappingsWithoutTypeName(elasticsearchCrudJsonWriter, entityInfo, elasticsearchMapping);

            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();

            CreateMappingCommandForTypeWithExistingIndex(elasticsearchCrudJsonWriter.GetJsonString(), mappingDefinition.Index, itemType);
        }
        private void CreateBulkContentForParentDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping)
        {
            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName("index");
            // Write the batch "index" operation header
            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            WriteValue("_index", elasticsearchMapping.GetIndexForType(entityInfo.EntityType));
            WriteValue("_type", elasticsearchMapping.GetDocumentType(entityInfo.EntityType));
            WriteValue("_id", entityInfo.Id);
            if (entityInfo.RoutingDefinition.ParentId != null && _elasticsearchSerializerConfiguration.ProcessChildDocumentsAsSeparateChildIndex)
            {
                // It's a document which belongs to a parent
                WriteValue("_parent", entityInfo.RoutingDefinition.ParentId);
            }
            if (entityInfo.RoutingDefinition.RoutingId != null &&
                _elasticsearchSerializerConfiguration.UserDefinedRouting)
            {
                // It's a document which has a specific route
                WriteValue("_routing", entityInfo.RoutingDefinition.RoutingId);
            }
            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteRaw("\n"); //ES requires this \n separator
            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            elasticsearchMapping.MapEntityValues(entityInfo, _elasticsearchCrudJsonWriter, true);

            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteRaw("\n");
        }
        private void CreateBulkContentForParentDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping)
        {
            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName("index");
            // Write the batch "index" operation header
            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            WriteValue("_index", elasticsearchMapping.GetIndexForType(entityInfo.EntityType));
            WriteValue("_type", elasticsearchMapping.GetDocumentType(entityInfo.EntityType));
            WriteValue("_id", entityInfo.Id);
            if (entityInfo.RoutingDefinition.ParentId != null && _elasticsearchSerializerConfiguration.ProcessChildDocumentsAsSeparateChildIndex)
            {
                // It's a document which belongs to a parent
                WriteValue("_parent", entityInfo.RoutingDefinition.ParentId);
            }
            if (entityInfo.RoutingDefinition.RoutingId != null &&
                _elasticsearchSerializerConfiguration.UserDefinedRouting)
            {
                // It's a document which has a specific route
                WriteValue("_routing", entityInfo.RoutingDefinition.RoutingId);
            }
            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteRaw("\n"); //ES requires this \n separator
            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            elasticsearchMapping.MapEntityValues(entityInfo, _elasticsearchCrudJsonWriter, true);

            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteRaw("\n");
        }
        private void CreateBulkContentForChildDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping,
            EntityContextInfo item)
        {
            var childMapping =
                _elasticsearchSerializerConfiguration.ElasticsearchMappingResolver.GetElasticSearchMapping(item.EntityType);

            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName("index");
            // Write the batch "index" operation header
            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            // Always write to the same index
            WriteValue("_index", childMapping.GetIndexForType(entityInfo.EntityType));
            WriteValue("_type", childMapping.GetDocumentType(item.EntityType));
            WriteValue("_id", item.Id);
            WriteValue("_parent", item.RoutingDefinition.ParentId);
            if (item.RoutingDefinition.RoutingId != null && _elasticsearchSerializerConfiguration.UserDefinedRouting)
            {
                // It's a document which has a specific route
                WriteValue("_routing", item.RoutingDefinition.RoutingId);
            }
            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteRaw("\n"); //ES requires this \n separator
            _elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            childMapping.MapEntityValues(item, _elasticsearchCrudJsonWriter, true);

            _elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            _elasticsearchCrudJsonWriter.JsonWriter.WriteRaw("\n");
        }
Exemplo n.º 9
0
        /// <summary>
        /// Create a new index for the parent document
        /// </summary>
        /// <param name="entityInfo"></param>
        /// <param name="elasticsearchMapping"></param>
        /// <param name="mappingDefinition">mapping definitions for the index type</param>
        private void IndexCreateCreatePropertyMappingForEntityForParentDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping, MappingDefinition mappingDefinition, ElasticsearchCrudJsonWriter elasticsearchCrudJsonWriter)
        {
            var itemType = elasticsearchMapping.GetDocumentType(entityInfo.EntityType);

            if (_processedItems.Contains("_mapping" + itemType))
            {
                return;
            }
            _processedItems.Add("_mapping" + itemType);

            //elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();


            elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName("mappings");
            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName(itemType);
            elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

            mappingDefinition.Source.WriteJson(elasticsearchCrudJsonWriter);
            mappingDefinition.All.WriteJson(elasticsearchCrudJsonWriter);

            if (entityInfo.RoutingDefinition.RoutingId != null && _elasticsearchSerializerConfiguration.UserDefinedRouting)
            {
                CreateForceRoutingMappingForDocument(elasticsearchCrudJsonWriter);
            }

            if (entityInfo.RoutingDefinition.ParentId != null)
            {
                CreateParentMappingForDocument(
                    elasticsearchCrudJsonWriter,
                    elasticsearchMapping.GetDocumentType(entityInfo.ParentEntityType));
            }

            ProccessPropertyMappingsWithoutTypeName(elasticsearchCrudJsonWriter, entityInfo, elasticsearchMapping);
            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();

            if (_elasticsearchSerializerConfiguration.ProcessChildDocumentsAsSeparateChildIndex)
            {
                if (elasticsearchMapping.ChildIndexEntities.Count > 0)
                {
                    elasticsearchMapping.SaveChildObjectsAsWellAsParent = false;
                    foreach (var item in elasticsearchMapping.ChildIndexEntities)
                    {
                        IndexCreateCreatePropertyMappingForChildDocument(elasticsearchCrudJsonWriter, entityInfo, elasticsearchMapping, item, mappingDefinition);
                    }
                }
            }

            elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
            //elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();

            //CreateMappingCommandForTypeWithExistingIndex(elasticsearchCrudJsonWriter.GetJsonString(), mappingDefinition.Index, itemType);
        }
Exemplo n.º 10
0
		private void ProccessPropertyMappingsWithoutTypeName(ElasticsearchCrudJsonWriter elasticsearchCrudJsonWriter, EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping)
		{
			//"properties": {
			elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName("properties");
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
			elasticsearchMapping.MapEntityValues(entityInfo, elasticsearchCrudJsonWriter, true, CreatePropertyMappings);
			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
		}
Exemplo n.º 11
0
		/// <summary>
		/// Create a new mapping for the child type in the parent document index
		/// </summary>
		/// <param name="entityInfo"></param>
		/// <param name="elasticsearchMapping"></param>
		/// <param name="item"></param>
		/// <param name="mappingDefinition">definition for the type mappings</param>
		private void CreatePropertyMappingForChildDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping, EntityContextInfo item, MappingDefinition mappingDefinition)
		{
			var childMapping =
				_elasticsearchSerializerConfiguration.ElasticsearchMappingResolver.GetElasticSearchMapping(item.EntityType);

			var parentMapping =
				_elasticsearchSerializerConfiguration.ElasticsearchMappingResolver.GetElasticSearchMapping(item.ParentEntityType);

			var childType = childMapping.GetDocumentType(item.EntityType);
			var parentType = parentMapping.GetDocumentType(item.ParentEntityType);

			var processedId = childType + "_" + parentType;
			if (_processedItems.Contains(childType))
			{
				var test = CommandTypes.Find(t => t.StartsWith(childType));
				if (test != processedId)
				{
					throw new ElasticsearchCrudException("InitMappings: Not supported, child documents can only have one parent");
				}
				return;
			}
			_processedItems.Add(childType);
			CommandTypes.Add(processedId);

			var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

			elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName(childType);
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

			mappingDefinition.Source.WriteJson(elasticsearchCrudJsonWriter);
			mappingDefinition.All.WriteJson(elasticsearchCrudJsonWriter);
			mappingDefinition.Analyzer.WriteJson(elasticsearchCrudJsonWriter);

			CreateParentMappingForDocument(
				elasticsearchCrudJsonWriter,
				elasticsearchMapping.GetDocumentType(item.ParentEntityType));

			if (item.RoutingDefinition.RoutingId != null && _elasticsearchSerializerConfiguration.UserDefinedRouting)
			{
				CreateForceRoutingMappingForDocument(elasticsearchCrudJsonWriter);
			}

			ProccessPropertyMappingsWithoutTypeName(elasticsearchCrudJsonWriter, item, childMapping);
			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
			CreateMappingCommandForTypeWithExistingIndex(elasticsearchCrudJsonWriter.GetJsonString(), elasticsearchMapping.GetIndexForType(entityInfo.EntityType), childMapping.GetDocumentType(item.EntityType));
		}
Exemplo n.º 12
0
		/// <summary>
		/// Create a new index for the parent document
		/// </summary>
		/// <param name="entityInfo"></param>
		/// <param name="elasticsearchMapping"></param>
		/// <param name="mappingDefinition">mapping definitions for the index type</param>
		private void CreatePropertyMappingForEntityForParentDocument(EntityContextInfo entityInfo, ElasticsearchMapping elasticsearchMapping, MappingDefinition mappingDefinition)
		{
			var itemType = elasticsearchMapping.GetDocumentType(entityInfo.EntityType);
			if (_processedItems.Contains("_mapping" +itemType))
			{
				return;
			}
			_processedItems.Add("_mapping" +itemType);

			var elasticsearchCrudJsonWriter = new ElasticsearchCrudJsonWriter();
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();
			elasticsearchCrudJsonWriter.JsonWriter.WritePropertyName(itemType);
			elasticsearchCrudJsonWriter.JsonWriter.WriteStartObject();

			mappingDefinition.Source.WriteJson(elasticsearchCrudJsonWriter);
			mappingDefinition.All.WriteJson(elasticsearchCrudJsonWriter);
			mappingDefinition.Analyzer.WriteJson(elasticsearchCrudJsonWriter);

			if (entityInfo.RoutingDefinition.RoutingId != null && _elasticsearchSerializerConfiguration.UserDefinedRouting)
			{
				CreateForceRoutingMappingForDocument(elasticsearchCrudJsonWriter);
			}

			if (entityInfo.RoutingDefinition.ParentId != null)
			{
				CreateParentMappingForDocument(
				elasticsearchCrudJsonWriter,
				elasticsearchMapping.GetDocumentType(entityInfo.ParentEntityType));
			}

			ProccessPropertyMappingsWithoutTypeName(elasticsearchCrudJsonWriter, entityInfo, elasticsearchMapping);

			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();
			elasticsearchCrudJsonWriter.JsonWriter.WriteEndObject();

			CreateMappingCommandForTypeWithExistingIndex(elasticsearchCrudJsonWriter.GetJsonString(), mappingDefinition.Index, itemType);
		
		}