2017-01-18 12 views
0

Departuresの単純なTripオブジェクトがあります。Tripという親を返す場合は、日付より大きい逸脱が含まれています。ネストされた日付範囲クエリフィルタElasticSearch NEST C#

{ 
    "query" : { 
     "nested" : { 
      "path" : "departures", 
      "query" : { 
       "bool" : { 
        "filter" : [ 
         { "range" : { "departures.out" : { "gt" : 1483315200000 } } } 
        ] 
       } 
      } 
     } 
    } 
} 

私はC#と、具体的NESTを使用して持っていますしかし:

トリップJSONを手動でポストデータをタイプエンドポイント上_search呼び出すことによって

{ 
    "title": "Something", 
    "code": "something else", 
    "departures" : [{ "out" : {date}, "in" : {date} }] 
} 

私は郵便配達で働くそれを得ることができるようになります。

var searchResponse = client.Search<Trip>(s => s 
       .Index("indexName") 
       .From(0) 
       .Size(10) 
       .Query(q => q 
        .Nested(n => n 
         .Path(t => t.Departures) 
         .Query(q2 => q2 
          .Bool(b => b 
           .Must(f => f 
            .DateRange(dr => dr 
             .Field(t2 => t2.Departures.First().Out) 
             .GreaterThanOrEquals("01/02/2017") 
             .Format("dd/MM/yyyy") 
            ) 
           ) 
          ) 
         ) 
        ) 
       ) 
      ); 

NESTはエラーをスローしています:

query: { 
    "nested" : { 
    "query" : { 
     "bool" : { 
     "must" : [ 
      { 
      "match_none" : { 
       "boost" : 1.0 
      } 
      } 
     ], 
     "disable_coord" : false, 
     "adjust_pure_negative" : true, 
     "boost" : 1.0 
     } 
    }, 
    "path" : "departures", 
    "ignore_unmapped" : false, 
    "score_mode" : "avg", 
    "boost" : 1.0 
    } 

なぜ日付範囲クエリが正しく作成されないのですか?私はさまざまなバリエーションを試してみましたが、何も動作していないようです!

+0

シリアライズされたクエリで投稿したjsonは、NESTの流暢なAPIで定義されたものと同じクエリではありません。私はあなたの例を試して、期待されるシリアライズされたクエリを取得しました。どのバージョンのElasticsearchをターゲットにしていますか、どのバージョンのNESTを使用していますか? –

+0

流暢なAPIでは、フィルターをboolの中のmustに変更しましたが、フィルターを使用すると同じ結果になります。 NESTによって生成されたクエリを投稿できますか?私は最新のものを使用しています。最近Nuget経由でネストをインストールしました – Ant

+0

あなたはどのElasticsearchのバージョンを使用していますか、どのバージョンのNESTを使用していますか? –

答えて

1

インデックスを手動で設定し、出発点をネストされたオブジェクトとして定義する必要がありました。データをインデックスにプッシュしてプロパティを自動マップするだけでは、それをネストされたオブジェクトとして定義しなかったため、クエリを適切に作成していませんでした。

var index = new CreateIndexDescriptor(INDEX_NAME) 
      .Mappings(ms => ms 
        .Map<Trip>(m => m 
          .AutoMap() 
          .Properties(p => p 
           .Nested<Departure>(n => n 
             .Name(d => d.Departures) 
           ) 
          ) 
        ) 
      ); 
+1

クエリを正しく作成していました。マッピングが正しくありませんでした:)デフォルトでは、NESTオートマッピングはPOCOプロパティを 'オブジェクト'マッピングとして推論します。 () 'オーバーライドして' nested'マッピングに設定します –