如何在AWS CloudSearch中指定搜索字段(使用.net SDK)

问题描述 投票:1回答:2

我有一个域,我有2个可搜索的字段(一个文字字段和一个文本字段),基本上是Category和Content。

我如何在字段中指定一个特定的字段使用?据我所知,它会默认搜索所有的可搜索字段,但这并不是我想要的(即,不想因为内容中包含了猫这个词,就搜索类别Cats,并从另一个类别中得到一个结果)。

我使用的是.Net SDK,我一直在翻阅他们的文档,但找不到这部分内容。

谢谢!我有一个域名,在这个域名上我有2个域名。

.net amazon-web-services sdk amazon-cloudsearch
2个回答
5
投票

经过深入研究,发现指定字段的方法是使用 fields 数组字段。

当使用 .Net SDK,可以这样做。

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

来源: https:/docs.aws.amazon.comcloudsearchlatestdeveloperguidesearch-api.html#structured-search-syntax。


0
投票

在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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.