public IRequest Marshall(DefineSuggesterRequest defineSuggesterRequest)
        {
            IRequest request = new DefaultRequest(defineSuggesterRequest, "AmazonCloudSearch");

            request.Parameters.Add("Action", "DefineSuggester");
            request.Parameters.Add("Version", "2013-01-01");
            if (defineSuggesterRequest != null && defineSuggesterRequest.IsSetDomainName())
            {
                request.Parameters.Add("DomainName", StringUtils.FromString(defineSuggesterRequest.DomainName));
            }
            if (defineSuggesterRequest != null)
            {
                Suggester suggester = defineSuggesterRequest.Suggester;
                if (suggester != null && suggester.IsSetSuggesterName())
                {
                    request.Parameters.Add("Suggester.SuggesterName", StringUtils.FromString(suggester.SuggesterName));
                }
                if (suggester != null)
                {
                    DocumentSuggesterOptions documentSuggesterOptions = suggester.DocumentSuggesterOptions;
                    if (documentSuggesterOptions != null && documentSuggesterOptions.IsSetSourceField())
                    {
                        request.Parameters.Add("Suggester.DocumentSuggesterOptions.SourceField", StringUtils.FromString(documentSuggesterOptions.SourceField));
                    }
                    if (documentSuggesterOptions != null && documentSuggesterOptions.IsSetFuzzyMatching())
                    {
                        request.Parameters.Add("Suggester.DocumentSuggesterOptions.FuzzyMatching", StringUtils.FromString(documentSuggesterOptions.FuzzyMatching));
                    }
                    if (documentSuggesterOptions != null && documentSuggesterOptions.IsSetSortExpression())
                    {
                        request.Parameters.Add("Suggester.DocumentSuggesterOptions.SortExpression", StringUtils.FromString(documentSuggesterOptions.SortExpression));
                    }
                }
            }

            return(request);
        }
Example #2
0
        public void CreateIndex(string name, IEnumerable <IFieldDefinition> fieldDefinitions)
        {
            var amazonSearchParameters = this.GetAmazonParams();
            var region = RegionEndpoint.GetBySystemName(amazonSearchParameters[Region]);

            //You must add here your accessKey and SecretAccessKey. See here how to get them: http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSGettingStartedGuide/AWSCredentials.html
            using (IAmazonCloudSearch cloudSearchClient = AWSClientFactory.CreateAmazonCloudSearchClient(amazonSearchParameters[AccessKey], amazonSearchParameters[SecretAccessKey], region))
            {
                try
                {
                    var domainNames = cloudSearchClient.ListDomainNames();
                    if (!domainNames.DomainNames.ContainsKey(name))
                    {
                        CreateDomainRequest domainRequest = new CreateDomainRequest();
                        domainRequest.DomainName = name;
                        cloudSearchClient.CreateDomain(domainRequest);
                    }

                    if (fieldDefinitions == null)
                    {
                        throw new ArgumentNullException("fieldDefinitions");
                    }

                    foreach (var fieldDefinition in fieldDefinitions)
                    {
                        DefineIndexFieldRequest request = new DefineIndexFieldRequest();
                        request.DomainName = name;
                        request.IndexField = new IndexField();
                        request.IndexField.IndexFieldName = fieldDefinition.Name.ToLowerInvariant();
                        if (fieldDefinition.Type == null || fieldDefinition.Type == typeof(string))
                        {
                            request.IndexField.IndexFieldType = IndexFieldType.Text;
                        }
                        if (fieldDefinition.Type == typeof(string[]))
                        {
                            request.IndexField.IndexFieldType = IndexFieldType.TextArray;
                        }
                        if (fieldDefinition.Type == typeof(int))
                        {
                            request.IndexField.IndexFieldType = IndexFieldType.Int;
                        }
                        if (fieldDefinition.Type == typeof(DateTime))
                        {
                            request.IndexField.IndexFieldType = IndexFieldType.Date;
                        }
                        cloudSearchClient.DefineIndexField(request);
                    }

                    SearchResults searchResults = new SearchResults();
                    foreach (var field in searchResults.HighlightedFields)
                    {
                        Suggester suggester = new Suggester();
                        DocumentSuggesterOptions suggesterOptions = new DocumentSuggesterOptions();
                        suggesterOptions.FuzzyMatching     = SuggesterFuzzyMatching.None;
                        suggesterOptions.SourceField       = field.ToLowerInvariant();
                        suggester.DocumentSuggesterOptions = suggesterOptions;
                        suggester.SuggesterName            = this.GetSuggesterName(field);
                        DefineSuggesterRequest defineRequest = new DefineSuggesterRequest();
                        defineRequest.DomainName = name;
                        defineRequest.Suggester  = suggester;

                        cloudSearchClient.DefineSuggester(defineRequest);
                    }

                    searchResults.Dispose();

                    IndexDocumentsRequest documentRequest = new IndexDocumentsRequest();
                    documentRequest.DomainName = name;
                    cloudSearchClient.IndexDocuments(documentRequest);
                }
                catch (BaseException ex)
                {
                    Log.Write(ex.InnerException.Message);
                }
                catch (LimitExceededException ex)
                {
                    Log.Write(ex.InnerException.Message);
                }
                catch (InternalException ex)
                {
                    Log.Write(ex.InnerException.Message);
                }
            }
        }