protected virtual IndexDocument CreateDocument(Member member) { var document = new IndexDocument(member.Id); document.AddFilterableValue("MemberType", member.MemberType); document.AddFilterableAndSearchableValue("Name", member.Name); document.AddFilterableAndSearchableValues("Emails", member.Emails); document.AddFilterableAndSearchableValues("Phones", member.Phones); document.AddFilterableValues("Groups", member.Groups); document.AddFilterableValue("CreatedDate", member.CreatedDate); document.AddFilterableValue("ModifiedDate", member.ModifiedDate ?? member.CreatedDate); if (member.Addresses?.Any() == true) { foreach (var address in member.Addresses) { IndexAddress(document, address); } } if (member.Notes?.Any() == true) { foreach (var note in member.Notes) { IndexNote(document, note); } } var contact = member as Contact; var employee = member as Employee; var organization = member as Organization; var vendor = member as Vendor; if (contact != null) { IndexContact(document, contact); } else if (employee != null) { IndexEmployee(document, employee); } else if (organization != null) { IndexOrganization(document, organization); } else if (vendor != null) { IndexVendor(document, vendor); } if (!member.DynamicProperties.IsNullOrEmpty()) { foreach (var property in member.DynamicProperties) { IndexDynamicProperty(document, property); } } return(document); }