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"); }
/// <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); }
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(); }
/// <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)); }
/// <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"); }
/// <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); }
/// <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); }