private async Task <string> InitProcessor(string indexName) { indexName = "gdst_" + indexName.ToLower(); _documentCount = (await _solrOperation.QueryAsync(SolrQuery.All, new QueryOptions() { StartOrCursor = new StartOrCursor.Start(0), Rows = 1 })).NumFound; _logger.LogInformation($"{indexName} NumFound :{_documentCount}"); var response = await _elasticClient.Indices.ExistsAsync(index : indexName.ToLower()); var solrSchema = await _solrOperation.GetSchemaAsync("schema.xml"); var filedTypes = solrSchema.SolrFields.Select(f => f.Type.Name).Distinct(); _logger.LogInformation($"total fields: {solrSchema.SolrFields.Count} Types: {string.Join(",", filedTypes)}"); if (!response.Exists) { var indexSettings = new IndexSettings() { NumberOfReplicas = 0 }; var properties = new Properties(); solrSchema.SolrFields.ForEach(sf => { switch (sf.Type.Name) { case "int": properties.Add(sf.Name, new NumberProperty(NumberType.Integer)); break; case "double": properties.Add(sf.Name, new NumberProperty(NumberType.Double)); break; case "float": properties.Add(sf.Name, new NumberProperty(NumberType.Float)); break; case "string": properties.Add(sf.Name, new KeywordProperty()); break; case "date": properties.Add(sf.Name, new DateProperty()); break; case "location_rpt": if (sf.Name == "GEO") { properties.Add(sf.Name, new GeoShapeProperty()); } else { properties.Add(sf.Name, new GeoPointProperty()); } break; default: properties.Add(sf.Name, new TextProperty()); break; } }); var typeMappings = new TypeMapping() { Properties = properties }; _elasticClient.Indices.Create(indexName, p => p.InitializeUsing(new IndexState() { Settings = indexSettings, Mappings = typeMappings })); } return(indexName); }