2017-11-13 3 views
0

나는 양성 서비스의 문서에 빙 맞춤 검색 API를 사용하려고합니다. 이상한 점은 내가 인도 위치에서 실행할 때 천 가지 이상의 결과를 제공하지만 미국 서버에서 실행하면 25 개 (가끔은 50 개의 결과)가 다시 실행된다는 것입니다. 여기에 대한 샘플 코드 :Bing 맞춤 검색 API는 한 위치에서 제한된 결과 만 반환하고 다른 위치에서 전체 결과 만 반환합니다.

 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; 
       } 
      } 
     } 

구독 키는 시험 사용 키입니다.

답변

2

이 동작의 이유가 있습니다. 사실 그것은 지역/국가/시장과 아무런 관련이 없습니다. 응답을 살펴본 후에이 메시지가 나타납니다. "속도 제한을 초과했습니다. 1 초 후에 다시 시도하십시오" 다음 호출을하기 위해 루프에서 각 호출 후 1 초 동안 기다려야한다는 것을 의미합니다. 지금은 시험 사용료 제한에 대한이 제한 사항을 알아야합니다. 그렇지 않으면 DDOS 공격 또는 기타를 방지하기 위해 모든 통화에 대해 유지됩니다. 하나의 iteraction이 이미 1 초 이상 걸릴 수도 있기 때문에 인도에서 온 것일 수 있습니다.

+0

요금 제한은 평가판 키 및 유료 구독에 적용됩니다. 유료 가입의 TPS는 https://azure.microsoft.com/en-us/pricing/details/cognitive-services/search-api/web/에서 확인할 수 있습니다. 사용자 정의 검색의 경우, 사용 가능한 키는 1TPS입니다. 대기 시간이 문제인지 여부를 확인하기 위해 통화 사이에 유휴 시간을두고 싶을 수 있습니다. – Ronak

0

시도 할 수있는 두 가지 방법은 다음과 같습니다. 1) searchTerm에서 % 20 및 % 3a를 사용할 필요가 없습니다. 예를 들어 Bing에 입력 할 때 구두점을 사용하십시오. var searchTerm = "microsoft.net resume filetype ::"+ 파일 유형 및 2) mkt = en-in (인도의 경우) 또는 en-us (미국의 경우)를 쿼리에 추가하여 시장을 강화하십시오. URL 끝 부분에 + "& mkt = en-in"을 추가하면됩니다.

나는 당신이 (EN-에서 모두과 EN-US 시장) 도메인을 선택이 쿼리에 대한 결과의 수천을 반환하는 한 사용자 정의 검색 추정.

+0

나는 searchterm을 바꾸고 시장을 추가하는 것에 대해 언급 한 두 가지 옵션을 모두 시도했다. 그러나 행동은 동일합니다. 명시 적으로 mkt 매개 변수를 제공하더라도 결과에 차이가 있습니다. 인도 컴퓨터에서 많은 결과를 얻지 만 미국 서버에서 실행하면 매우 제한된 결과가 나타납니다. 국가/지역별 또는 다른 것입니까? 때문에, 나는 EU의 위치에있는 하나의 기계로 노력했기 때문에, 또한 나에게 많은 결과를 주었다. –

관련 문제