【问题标题】:How to specify search field in AWS CloudSearch (using .net SDK)如何在 AWS CloudSearch 中指定搜索字段(使用 .net SDK)
【发布时间】:2014-09-05 22:21:17
【问题描述】:

我有一个域,其中有 2 个可搜索字段(文字和文本字段),基本上是类别和内容。

如何指定要在字段中使用的特定字段?据我所知,它将默认搜索所有可搜索字段,但这不是我想要的(即,不想仅仅因为它在内容。)

我正在使用 .Net SDK,并且我一直在浏览他们的文档,但找不到该部分。

谢谢!

【问题讨论】:

    标签: .net amazon-web-services sdk amazon-cloudsearch


    【解决方案1】:

    经过一番挖掘,指定字段的方法是使用fields数组字段。

    使用.Net SDK时,可以这样:

    new SearchRequest { 
       Query = query, 
       QueryOptions = @"{""fields"":[""field_name""]}" 
    };
    

    来源:https://docs.aws.amazon.com/cloudsearch/latest/developerguide/search-api.html#structured-search-syntax

    【讨论】:

    • 你做过云搜索。我正在寻找 java 或 c# 云搜索代码。你能帮我吗?
    【解决方案2】:

    C# 中 Cloudsearch 的示例代码并不常见,但你可以试试我写的这个

    public List<AdditionalFields> Search(string query)
        {
            var batch = new List<AdditionalFields>();
            query = query.Trim();
            try
            {
                // Configure the Client that you'll use to make search requests
                string queryUrl = @"http://search-********.cloudsearch.amazonaws.com";
                var awsCredentials = new Amazon.Runtime.BasicAWSCredentials();
                AmazonCloudSearchDomainClient searchClient = new AmazonCloudSearchDomainClient(queryUrl, awsCredentials);
    
                SearchRequest searchRequest = new SearchRequest();
                searchRequest.Query = query;
                //searchRequest.Facet =
                //searchRequest.QueryOptions.
                searchRequest.Return = "_all_fields";
    
                SearchResponse searchResponse = searchClient.SearchAsync(searchRequest).Result;
    
                foreach (var hit in searchResponse.Hits.Hit)
                {
                    var fields = new AdditionalFields();
                    var searchfields = new Fields();
                    searchfields.content = hit.Fields["content"][0].ToString();
                    searchfields.directory = hit.Fields["directory"][0].ToString();
                    searchfields.resourcename = hit.Fields["resourcename"][0].ToString();
                    searchfields.title = hit.Fields["title"][0].ToString();
                    fields.abridgedContent = searchfields.content.Replace(searchfields.title, string.Empty);
                    searchfields.version = hit.Fields["version"][0].ToString();
                    fields.abridgedContent = Abridged(fields.abridgedContent, query);
                    searchfields.description = hit.Fields["description"][0].ToString();
                    searchfields.resourcename = hit.Fields["resourcename"][0].ToString();
                    searchfields.resourcetype = hit.Fields["resourcetype"][0].ToString();
                    fields.url = "/bookviewer?bookValue=" + searchfields.resourcename + "&version=" + searchfields.version + "&chapterFolder=" + searchfields.directory + "&firstChapterNo=" + searchfields.description + ".htm";
                    fields.fields = searchfields;
                    batch.Add(fields);
                }
    
                // return searchResponse.Status.ToString();
            }
            catch (AmazonCloudSearchDomainException ex)
            {
                var fields = new AdditionalFields();
                fields.error = "ERROR : " + ex.Message;
    
                batch.Add(fields);
    
            }
            catch (Exception ex)
            {
                var fields = new AdditionalFields();
                fields.error = "ERROR : " + ex.Message;
                batch.Add(fields);
            }
    
            return batch;
        }
    

    【讨论】:

    • 你应该安装 cloudsearchdomain nuget 包
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    相关资源
    最近更新 更多