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で最低価格です)
ご協力いただければ幸いです!
集計、特に最小集計を試しましたか? https://www.elastic.co/guide/en/elasticsearch/client/net-api/1.x/min-aggregation.html –
.Aggregations(a => a.Min( "min_price" 、ma => ma.Field(p => p.Value)))、これは私に1つのaggreagation(合計最低価格)を与えます。私は1日当たり最低価格を必要とし、結果セット全体の最低価格は必要としません。 –
Minサブ集計でDateヒストグラム集計を使用する必要があり、毎日期待していることがあります。 – Val