2017-01-25 6 views
0

私はホテルの予約アプリケーションに取り組んでおり、低価格のカレンダーを表示する必要があります。Elasticsearch - 指定した日付範囲の最低価格を取得する方法

public class Price 
{ 
    public string Id { get; set; } 
    public int CityId { get; set; } 
    public int HotelId { get; set; } 
    public double Value { get; set; } 
    public DateTime Date { get; set; } 
} 

をそして今、与えられた都市の最低価格を取得したいと思います:

私はこのような価格のクラスを作成しました。 は、私はこのような何かを試してみました:

var result = client.Search<Price>(s => s 
    .Skip(0) 
    .Take(1000) 
    .Query(q => q 
     .Bool(b => b 
      .Must(
       m => m.Term(t => t.CityId, cityId), 
       m => m.DateRange(r => r.Field(rf => rf.Date).GreaterThanOrEquals(startDate).LessThanOrEquals(endDate)))))); 

問題は、市内のいくつかのホテルがある場合は、私が毎日のために複数の価格を取得します、です。

ここでは例です:

Id = 1 
CityId = 1 
HotelId = 1 
Value = 100 
Date = 2017-01-25 

Id = 2 
CityId = 1 
HotelId = 2 
Value = 200 
Date = 2017-01-25 

Id = 3 
CityId = 1 
HotelId = 1 
Value = 400 
Date = 2017-01-26 

Id = 4 
CityId = 1 
HotelId = 2 
Value = 300 
Date = 2017-01-26 

私は、次のリクエスト送信する場合:

cityId = 1 
startDate = 2017-01-25 
endDate = 2017-01-26 

私のクエリは、文書1、2、3、4
を返します。しかし、私は返すように希望をドキュメント1と4のみ。
(100は2017-01-25で最低価格、300は2017-01-26で最低価格です)

ご協力いただければ幸いです!

+0

集計、特に最小集計を試しましたか? https://www.elastic.co/guide/en/elasticsearch/client/net-api/1.x/min-aggregation.html –

+0

.Aggregations(a => a.Min( "min_price" 、ma => ma.Field(p => p.Value)))、これは私に1つのaggreagation(合計最低価格)を与えます。私は1日当たり最低価格を必要とし、結果セット全体の最低価格は必要としません。 –

+1

Minサブ集計でDateヒストグラム集計を使用する必要があり、毎日期待していることがあります。 – Val

答えて

0

私はネストとそれの構文に関する実用的な知識を持っていません。だから私はあなたにネイティブのESクエリを提供しようとし、後でネストでそれを動作させることができます。

{ 
    "aggs": { 
     "date_histogram": { 
      "date_histogram": { 
       "field": "Date", 
       "interval": "day" 
      }, 
      "aggs": { 
       "min_per_day": { 
        "min": { 
         "field": "Value" 
        } 
       } 
      } 
     } 
    }, 
    "query": { 
     "bool": { 
      "must": [{ 
       "term": { 
        "cityId": { 
         "value": 2 
        } 
       } 
      }, { 
       "range": { 
        "Date": { 
         "gte": 10, 
         "lte": 20 
        } 
       } 
      }] 
     } 
    } 
} 

1日間隔の日付ヒストグラムを追加し、furthurは最小値の値フィールドの集計を評価します。

ありがとうございました

関連する問題