2017-02-25 15 views
0

ElasticSearch 5.1でのクエリ要求には、いくつかのフィルタ(範囲と用語)を使用する必要があります。私は(1つのフィルタのみ)別々に使用している場合、それはOKです:ElasticSearch 5.1フィルタリングされた複数のフィルタを使用したクエリ

var o = new 
      { 
       size = 20, 
       query = new 
       { 
        @bool = new 
        { 
         must = new 
         { 
          query_string = new 
          { 
           fields = new[] { "Title" }, 
           query = search_query 
          } 
         }, 
         filter = new 
         { 
          terms = new 
          { 
           SourceId = new[] {10,11,12} 
          } 
         } 
        } 
       }     
      }; 

OR

var o = new 
      { 
       size = 20, 
       query = new 
       { 
        @bool = new 
        { 
         must = new 
         { 
          query_string = new 
          { 
           fields = new[] { "Title" }, 
           query = search_query 
          } 
         }, 
         filter = new 
         { 
          range = new 
          { 
           PostPubDate = new 
           { 
            gte = "2015-10-01T00:00:00", 
            lte = "2015-11-01T12:00:00" 
           } 
          } 
         } 
        } 
       }     
      }; 

私はそれらを使用している場合は、私の両方が応答400エラーを取得:

string url = "http://localhost:9200/neg_collector/posts/_search"; 
      var request = (HttpWebRequest)HttpWebRequest.Create(url); 
      var o = new 
      { 
       size = 20, 
       query = new 
       { 
        @bool = new 
        { 
         must = new 
         { 
          query_string = new 
          { 
           fields = new[] { "Title" }, 
           query = search_query 
          } 
         }, 
         filter = new 
         { 
          terms = new 
          { 
           SourceId = new[] {10,11,12} 
          }, 
          range = new 
          { 
           PostPubDate = new 
           { 
            gte = "2015-10-01T00:00:00", 
            lte = "2015-11-01T12:00:00" 
           } 
          } 
         } 
        } 
       }     
      }; 


      request.Method = "POST"; 
      var jsonObj = JsonConvert.SerializeObject(o); 
      var data = Encoding.UTF8.GetBytes(jsonObj); 
      request.ContentType = "application/x-www-form-urlencoded"; 
      request.ContentLength = data.Length; 
      using (var stream = request.GetRequestStream()) 
      { 
       stream.Write(data, 0, data.Length); 
      } 

      string responseString = string.Empty; 
      var response = (HttpWebResponse)request.GetResponse(); 

私は何だが間違っている?

答えて

1

あなたのフィルタは、単にオブジェクトの配列であることが必要ありがとう:

... 
        filter = new object[] 
        { 
         new { 
         terms = new 
         { 
          SourceId = new[] {10,11,12} 
         } 
         }, 
         new { 
         range = new 
         { 
          PostPubDate = new 
          { 
           gte = "2015-10-01T00:00:00", 
           lte = "2015-11-01T12:00:00" 
          } 
         } 
         } 
        } 
+0

はあなたにたくさんありがとうございました!それは今働く –

+0

素晴らしい、それがうまくいった! – Val

関連する問題