Created
August 1, 2012 15:16
-
-
Save wwb/3227714 to your computer and use it in GitHub Desktop.
complex map / reduce example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MapReadingDocument | |
{ | |
public MapReadingDocument() | |
{ | |
Created = DateTimeOffset.Now; | |
FederalInfo = new FederalCoordinates(); | |
TransmissionTech = TransmissionTechnology.AllOtherTransmissionTechs; | |
MaxAdvertisedUp = new TransmissionSpeed(); | |
MaxAdvertisedDown = new TransmissionSpeed(); | |
TypicalUpload = new TransmissionSpeed(); | |
TypicalDownload = new TransmissionSpeed(); | |
DownloadSpeed= new TransmissionSpeed(); | |
UploadSpeed = new TransmissionSpeed(); | |
} | |
public int Id { get; set; } | |
public DateTimeOffset Created { get; set; } | |
public string SurveyId { get; set; } | |
public string StateAbbreviation { get; set; } | |
public string ProviderName { get; set; } | |
public string DoingBusinessAsName { get; set; } | |
public string HoldingCompanyId { get; set; } | |
public string HoldingCompanyName { get; set; } | |
public int PopulationPassed { get; set; } | |
public int HousingUnitsPassed { get; set; } | |
public FederalCoordinates FederalInfo { get; set; } | |
public TransmissionTechnology TransmissionTech { get; set; } | |
public TransmissionSpeed MaxAdvertisedUp { get; set; } | |
public TransmissionSpeed MaxAdvertisedDown { get; set; } | |
public TransmissionSpeed TypicalUpload { get; set; } | |
public TransmissionSpeed TypicalDownload { get; set; } | |
public TransmissionSpeed DownloadSpeed { get; set; } | |
public TransmissionSpeed UploadSpeed { get; set; } | |
} | |
public class TransmissionSpeed | |
{ | |
public string TypeId { get; set; } | |
public string Name { get; set; } | |
public int MinimumSpeed { get; set; } | |
public int MaximumSpeed { get; set; } | |
} | |
public class TransmissionTechnology | |
{ | |
public string TypeId { get; set; } | |
public string Name { get; set; } | |
} | |
public class ProviderByStateAndService : AbstractIndexCreationTask<MapReadingDocument, ProviderByStateAndService.Result> | |
{ | |
public class Result | |
{ | |
public string StateAbbreviation { get; set; } | |
public string StateFipsId { get; set; } | |
public string ProviderName { get; set; } | |
public string FccLicenseId { get; set; } | |
public string HoldingCompanyId { get; set; } | |
public string HoldingCompanyName { get; set; } | |
public string TechnologyTypeId { get; set; } | |
public string TechnologyTypeName { get; set; } | |
public int PopulationPassed { get; set; } | |
public int HousingUnitsPassed { get; set; } | |
public string[] MappingDocuments { get; set; } | |
} | |
public ProviderByStateAndService() | |
{ | |
Map = mdocs => from md in mdocs | |
select new | |
{ | |
StateAbbreviation = md.StateAbbreviation, | |
StateFipsId = md.FederalInfo.StateFipsId, | |
ProviderName = md.ProviderName, | |
FccLicenseId = md.FederalInfo.FccIdentifier, | |
HoldingCompanyId = md.HoldingCompanyId, | |
HoldingCompanyName = md.HoldingCompanyName, | |
TechnologyTypeName = md.TransmissionTech.Name, | |
TechnologyTypeId = md.TransmissionTech.TypeId, | |
PopulationPassed = (int)md.PopulationPassed, | |
HousingUnitsPassed = (int)md.HousingUnitsPassed, | |
MappingDocuments = new string[] { md.Id.ToString() } | |
}; | |
Reduce = results => from r in results | |
group r by new {r.FccLicenseId, r.ProviderName, r.StateAbbreviation, r.HoldingCompanyId, r.HoldingCompanyName, r.TechnologyTypeId, r.TechnologyTypeName, r.StateFipsId} | |
into g | |
select new | |
{ | |
StateAbbreviation = g.Key.StateAbbreviation, | |
StateFipsId = g.Key.StateFipsId, | |
ProviderName = g.Key.ProviderName, | |
FccLicenseId = g.Key.FccLicenseId, | |
HoldingCompanyId = g.Key.HoldingCompanyId, | |
HoldingCompanyName = g.Key.HoldingCompanyName, | |
TechnologyTypeName = g.Key.TechnologyTypeName, | |
TechnologyTypeId = g.Key.TechnologyTypeId, | |
PopulationPassed = g.Sum(x => (int)x.PopulationPassed), | |
HousingUnitsPassed = g.Sum(x => (int)x.HousingUnitsPassed), | |
MappingDocuments = g.SelectMany(x => x.MappingDocuments).Distinct().ToArray() | |
}; | |
Store(x => x.PopulationPassed, FieldStorage.Yes); | |
Store(x => x.HousingUnitsPassed, FieldStorage.Yes); | |
Index(x => x.ProviderName, FieldIndexing.Analyzed); | |
Index(x => x.TechnologyTypeId, FieldIndexing.NotAnalyzed); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment