public IndexDefinition() { // settings the default values IndexSettings = new IndexSettings {NumberOfReplicas = 1, NumberOfShards = 5}; IndexAliases = new IndexAliases(); IndexWarmers = new IndexWarmers(); Mapping = new MappingDefinition(); }
/// <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); }
/// <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)); }
public void CreatePropertyMappingForTopDocument(EntityContextInfo entityInfo, MappingDefinition mappingDefinition) { var elasticSearchMapping = _elasticsearchSerializerConfiguration.ElasticsearchMappingResolver.GetElasticSearchMapping(entityInfo.EntityType); elasticSearchMapping.TraceProvider = _traceProvider; elasticSearchMapping.SaveChildObjectsAsWellAsParent = _elasticsearchSerializerConfiguration.SaveChildObjectsAsWellAsParent; elasticSearchMapping.ProcessChildDocumentsAsSeparateChildIndex = _elasticsearchSerializerConfiguration.ProcessChildDocumentsAsSeparateChildIndex; CreatePropertyMappingForEntityForParentDocument(entityInfo, elasticSearchMapping, mappingDefinition); if (_elasticsearchSerializerConfiguration.ProcessChildDocumentsAsSeparateChildIndex) { if (elasticSearchMapping.ChildIndexEntities.Count > 0) { // Only save the top level items now elasticSearchMapping.SaveChildObjectsAsWellAsParent = false; foreach (var item in elasticSearchMapping.ChildIndexEntities) { CreatePropertyMappingForChildDocument(entityInfo, elasticSearchMapping, item, mappingDefinition); } } } elasticSearchMapping.ChildIndexEntities.Clear(); }