2017-11-13 14 views
0

私は妊娠中のサービスからの文書にbingカスタム検索APIを使用しようとしています。奇妙なことは、私がインドの場所から実行すると、それは私に1000以上の結果を与えますが、私はそれを米国のサーバーから実行すると、それはわずか25(時には50の結果)を返します。ここでは、そのサンプルコード:Bingカスタム検索APIは、1つの場所からの限定的な結果と異なる場所からの完全な結果を返します。

 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攻撃か何かを防ぐためにすべての呼び出しのために保たれます。 インドから来た可能性がありますので、それは1つのiteractionが既に1つ以上の秒を取っているかもしれないので働いていました。

+0

レート制限は、有料のサブスクリプションだけでなく、試用キーにも適用されます。有料購読のTPSは、https://azure.microsoft.com/en-us/pricing/details/cognitive-services/search-api/web/で確認できます。カスタム検索の場合、空きキーは1 TPSです。待ち時間が問題であるかどうかを確認するために、呼び出しの間にある程度のアイドル時間を置くことができます。 – Ronak

0

2つのことを試すことができます:1)searchTermでは、%20と%3aを使用する必要はありません.Bingに入力するときに句読点を使用してください。 var searchTerm = "microsoft.net resume filetype ::" +ファイルタイプ、および2)クエリにmkt = en-in(インドの場合)またはen-us(米国の場合)を追加して市場を強制します。これを行うには、URLの末尾に+ "& mkt = en-in"を追加します。

私はあなたがこのクエリの結果、数千を返すドメイン(両方の市場におけるエンとEN-US)を選択しているカスタム検索のためと推定。

+0

私はsearchtermの変更と市場の追加について述べたこれらのオプションの両方を試しました。しかし、その行動は同じです。明示的にmktパラメータを与えても、結果に違いがあります。インドのマシンからは、多くの結果が得られますが、米国のサーバーから実行すると、非常に限られた結果しか得られません。それは国/地域特有のものなのでしょうか。なぜなら、私はEUの場所にある1台のマシンで試したので、それはまた私に多くの結果をもたらしました。 –

関連する問題