/********************************************************************************************************** * METHODS **********************************************************************************************************/ /// <summary>Builds the queries.</summary> /// <param name="context">The context.</param> /// <param name="request">The request.</param> /// <returns>The search queries.</returns> public override IEnumerable <IExternalSearchQuery> BuildQueries(ExecutionContext context, IExternalSearchRequest request) { if (!this.Accepts(request.EntityMetaData.EntityType)) { yield break; } var existingResults = request.GetQueryResults <MappingResponse>(this).ToList(); Func <string, bool> nameFilter = value => OrganizationFilters.NameFilter(context, value) || existingResults.Any(r => string.Equals(r.Data.Response.Name, value, StringComparison.InvariantCultureIgnoreCase)); // Query Input //For companies use CluedInOrganization vocab, for people use CluedInPerson and so on for different types. var entityType = request.EntityMetaData.EntityType; var organizationTicker = request.QueryParameters.GetValue(CluedIn.Core.Data.Vocabularies.Vocabularies.CluedInOrganization.TickerSymbol, new HashSet <string>()); if (organizationTicker != null) { var values = organizationTicker.Select(NameNormalization.Normalize).ToHashSet(); foreach (var value in values.Where(v => !nameFilter(v))) { yield return(new ExternalSearchQuery(this, entityType, ExternalSearchQueryParameter.Identifier, value)); } } }
/********************************************************************************************************** * METHODS **********************************************************************************************************/ /// <inheritdoc/> public override IEnumerable <IExternalSearchQuery> BuildQueries(ExecutionContext context, IExternalSearchRequest request) { if (!this.Accepts(request.EntityMetaData.EntityType)) { yield break; } //if (string.IsNullOrEmpty(this.TokenProvider.ApiToken)) // throw new InvalidOperationException("PermId ApiToken have not been configured"); var existingResults = request.GetQueryResults <PermIdSocialResponse>(this).ToList(); Func <string, bool> existingDataFilter = value => existingResults.Any(r => string.Equals(r.Data.OrganizationName.First(), value, StringComparison.InvariantCultureIgnoreCase)); Func <string, bool> nameFilter = value => OrganizationFilters.NameFilter(context, value) || existingResults.Any(r => string.Equals(r.Data.OrganizationName.First(), value, StringComparison.InvariantCultureIgnoreCase)); // Query Input var entityType = request.EntityMetaData.EntityType; var organizationName = request.QueryParameters.GetValue(CluedIn.Core.Data.Vocabularies.Vocabularies.CluedInOrganization.OrganizationName, new HashSet <string>()); if (!string.IsNullOrEmpty(request.EntityMetaData.Name)) { organizationName.Add(request.EntityMetaData.Name); } if (!string.IsNullOrEmpty(request.EntityMetaData.DisplayName)) { organizationName.Add(request.EntityMetaData.DisplayName); } if (organizationName != null) { var values = organizationName.GetOrganizationNameVariants() .Select(NameNormalization.Normalize) .ToHashSetEx(); foreach (var value in values) { if (existingDataFilter(value) || nameFilter(value)) { continue; } yield return(new ExternalSearchQuery(this, entityType, ExternalSearchQueryParameter.Name, value)); } } }
/********************************************************************************************************** * METHODS **********************************************************************************************************/ /// <summary>Builds the queries.</summary> /// <param name="context">The context.</param> /// <param name="request">The request.</param> /// <returns>The search queries.</returns> public override IEnumerable <IExternalSearchQuery> BuildQueries(ExecutionContext context, IExternalSearchRequest request) { if (!this.Accepts(request.EntityMetaData.EntityType)) { yield break; } var existingResults = request.GetQueryResults <CompanyAutocompleteResult>(this).ToList(); Func <string, bool> domainFilter = value => existingResults.Any(r => string.Equals(r.Data.Domain, value, StringComparison.InvariantCultureIgnoreCase)); Func <string, bool> nameFilter = value => OrganizationFilters.NameFilter(context, value); // Query Input var entityType = request.EntityMetaData.EntityType; var website = request.QueryParameters.GetValue(CluedIn.Core.Data.Vocabularies.Vocabularies.CluedInOrganization.Website, new HashSet <string>()).ToHashSetEx(); var organizationName = request.QueryParameters.GetValue(CluedIn.Core.Data.Vocabularies.Vocabularies.CluedInOrganization.OrganizationName, new HashSet <string>()).ToHashSetEx(); var emailDomainNames = request.QueryParameters.GetValue(CluedIn.Core.Data.Vocabularies.Vocabularies.CluedInOrganization.EmailDomainNames, new HashSet <string>()).ToHashSetEx(); emailDomainNames.AddRange(website.GetDomainNamesFromUris()); if (!string.IsNullOrEmpty(request.EntityMetaData.Name)) { organizationName.Add(request.EntityMetaData.Name); } if (!string.IsNullOrEmpty(request.EntityMetaData.DisplayName)) { organizationName.Add(request.EntityMetaData.DisplayName); } request.EntityMetaData.Aliases.ForEach(a => organizationName.Add(a)); if (website.Any()) { var values = website; foreach (var value in values) { Uri uri; if (Uri.TryCreate(value, UriKind.Absolute, out uri)) { if (!domainFilter(uri.Host)) { yield return(new ExternalSearchQuery(this, entityType, ExternalSearchQueryParameter.Domain, uri.Host)); } } else if (!domainFilter(value)) { yield return(new ExternalSearchQuery(this, entityType, ExternalSearchQueryParameter.Domain, value)); } } } if (emailDomainNames.Any()) { var values = emailDomainNames.SelectMany(v => v.Split(new[] { ",", ";", "|" }, StringSplitOptions.RemoveEmptyEntries)).Select(v => v.ToLowerInvariant()).ToHashSetEx(); foreach (var value in values.Where(v => !domainFilter(v))) { Uri uri; if (Uri.TryCreate(value, UriKind.Absolute, out uri)) { if (!domainFilter(uri.Host)) { yield return(new ExternalSearchQuery(this, entityType, ExternalSearchQueryParameter.Domain, uri.Host)); } } else if (!domainFilter(value)) { yield return(new ExternalSearchQuery(this, entityType, ExternalSearchQueryParameter.Domain, value)); } } } if (organizationName.Any()) { var values = organizationName.GetOrganizationNameVariants() .Select(NameNormalization.Normalize) .ToHashSetEx(); foreach (var value in values.Where(v => !nameFilter(v))) { yield return(new ExternalSearchQuery(this, entityType, ExternalSearchQueryParameter.Name, value)); } } }