【问题标题】:Bing custom search apis returning only limited results from one location and full result from different location必应自定义搜索 api 仅返回来自一个位置的有限结果和来自不同位置的完整结果
【发布时间】:2018-04-25 17:37:57
【问题描述】:

我正在尝试将 Bing 自定义搜索的 API 用于认知服务中的文档。奇怪的是,当我从印度运行它时,它给了我一千多个结果,但是当我从美国服务器运行它时,它只返回 25 个(有时是 50 个结果)。这是示例代码:

var totalCount = 0;
var filetypes = new List<string> { "pdf", "docx", "doc" };
foreach (var filetype in filetypes)
{
    var searchTerm = "microsoft%20.net%20resume+filetype%3a" + filetype;
    Console.WriteLine("Searching for : " + filetype);

    for (var i = 0; i < 40; i++)
    {
        var nextCount = 0;
        var url = "https://api.cognitive.microsoft.com/bingcustomsearch/v7.0/search?" +
                  "q=" + searchTerm +
                  "&customconfig=" + customConfigId +
                  "&count=25" + "&offset=" + ((i * 25) + nextCount);

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
            var httpResponseMessage = client.GetAsync(url).Result;
            var responseContent = httpResponseMessage.Content.ReadAsStringAsync().Result;
            BingCustomSearchResponse response =
                JsonConvert.DeserializeObject<BingCustomSearchResponse>(responseContent);

            if (response.webPages == null || response.webPages.value.Length <= 0)
            {
                Console.WriteLine("response.webPages is null ");
                break;
            }

            foreach (var webPage in response.webPages.value)
            {
                Console.WriteLine("name: " + webPage.name);
                Console.WriteLine("url: " + webPage.url);
                Console.WriteLine("displayUrl: " + webPage.displayUrl);
                Console.WriteLine("snippet: " + webPage.snippet);
                Console.WriteLine("dateLastCrawled: " + webPage.dateLastCrawled);
                Console.WriteLine();
            }
            totalCount = totalCount + response.webPages.value.Length;
        }
    }
}

我使用的订阅密钥是试用密钥。

【问题讨论】:

    标签: bing-api azure-cognitive-services


    【解决方案1】:

    您可以尝试两件事:1) 在 searchTerm 中,无需使用 %20 和 %3a,只需在 Bing 中键入时使用标点符号,例如var searchTerm = "microsoft.net resume filetype::"+filetype,以及 2) 通过在查询中附加 mkt=en-in(对于印度)或 en-us(对于美国)来强制执行市场。您可以通过在网址末尾附加 +"&mkt=en-in" 来做到这一点。

    我假设您选择了针对该查询返回数千个结果的域( en-in 和 en-us 市场)进行自定义搜索。

    【讨论】:

    • 我尝试了您提到的关于更改搜索词和添加市场的这两个选项。但是行为是一样的。即使明确给出 mkt 参数,结果也存在差异。从印度机器我得到了很多结果,但从美国服务器运行它给出的结果非常有限。是特定国家/地区还是其他。因为,我尝试了一台位于欧盟位置的机器,然后它也给了我大量的结果。
    【解决方案2】:

    我知道了这种行为的原因。实际上它与地区/国家/市场无关。 在查看了回复后,我收到了这条消息。 “超出速率限制。请在 1 秒后重试” 这意味着在循环中的每次调用之后,我必须等待 1 秒才能进行下一次调用。现在需要知道这个限制是试用订阅还是保留所有呼叫以防止 DDOS 攻击或其他东西。 可能来自印度它正在工作,因为可能一次迭代已经花费了一秒或更多秒。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多