예제 #1
0
        /**********************************************************************************************************
        * 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));
                }
            }
        }
예제 #2
0
        /**********************************************************************************************************
        * 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));
                }
            }
        }
예제 #3
0
        /**********************************************************************************************************
        * 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));
                }
            }
        }