これを行うにはインライングルービーを行う必要があるかもしれませんが、ネストしたクエリと範囲クエリを組み合わせることでこれを行うことができるはずですプロパティの配列を使用すると、これを不可能にする可能性があります。Elasticsearchのネストされた配列の範囲フィルタ
世界のどこにいるかに応じて異なる配送見積もりを提供したいと考えている商品については、私が事前に知っているカットオフ日時を事前ロードしたい1週間に1回または2回。
PUT /example_delivery
{
"mappings": {
"product": {
"properties": {
"delivery_times": {
"type": "nested",
"properties": {
"local_area": {
"type": "nested",
"properties": {
"cut_off_datetime": {
"type": "date", "format": "dateOptionalTime"
},
"get_it_by_date": {
"type": "date", "format": "dateOptionalTime"
}
}
},
"out_of_state": {
"type": "nested",
"properties": {
"cut_off_datetime": {
"type": "date", "format": "dateOptionalTime"
},
"get_it_by_date": {
"type": "date", "format": "dateOptionalTime"
}
}
}
}
},
"name": {
"type": "string"
}
}
}
}
}
私はその後、いくつかの製品をロードすることを決定した:私はこれで行くよどこ
PUT /example_delivery/product/1
{
"name": "Product 1",
"delivery_times":[
{"local_area":[
{"cut_off_datetime": "2016-10-28T14:00:00", "get_it_by_date": "2016-10-29T13:00:00"},
{"cut_off_datetime": "2016-10-31T14:00:00", "get_it_by_date": "2016-11-01T23:59:59"},
{"cut_off_datetime": "2016-11-01T14:00:00", "get_it_by_date": "2016-11-02T23:59:59"},
{"cut_off_datetime": "2016-11-02T14:00:00", "get_it_by_date": "2016-11-03T23:59:59"}
]},
{"out_of_state":[
{"cut_off_datetime": "2016-10-28T14:00:00", "get_it_by_date": "2016-11-01T23:59:59"},
{"cut_off_datetime": "2016-10-31T14:00:00", "get_it_by_date": "2016-11-02T23:59:59"},
{"cut_off_datetime": "2016-11-01T14:00:00", "get_it_by_date": "2016-11-03T23:59:59"},
{"cut_off_datetime": "2016-11-02T14:00:00", "get_it_by_date": "2016-11-04T23:59:59"}
]}
]
}
PUT /example_delivery/product/2
{
"name": "Product 2",
"delivery_times":[
{"local_area":[
{"cut_off_datetime": "2016-10-28T14:00:00", "get_it_by_date": "2016-11-29T13:00:00"},
{"cut_off_datetime": "2016-10-31T14:00:00", "get_it_by_date": "2016-12-01T23:59:59"},
{"cut_off_datetime": "2016-11-01T14:00:00", "get_it_by_date": "2016-12-02T23:59:59"},
{"cut_off_datetime": "2016-11-02T14:00:00", "get_it_by_date": "2016-12-03T23:59:59"}
]},
{"out_of_state":[
{"cut_off_datetime": "2016-10-28T14:00:00", "get_it_by_date": "2016-12-01T23:59:59"},
{"cut_off_datetime": "2016-10-31T14:00:00", "get_it_by_date": "2016-12-02T23:59:59"},
{"cut_off_datetime": "2016-11-01T14:00:00", "get_it_by_date": "2016-12-03T23:59:59"},
{"cut_off_datetime": "2016-11-02T14:00:00", "get_it_by_date": "2016-12-04T23:59:59"}
]}
]
}
あなたが見ることができる、私は願っています。私はdelivery_times
"now"
にgte
あるcut_off_datetime
オブジェクトが、get_it_by_date
がターゲットにlte
である少なくとも一つが存在するためだけの製品を返すように検索を行うが、delivery_times.local_area
またはdelivery_times.out_of_state
のネストされたパスにフィルタを適用することができるようにしたいですユーザーがフィルタで指定した時間。私が言うように、多分
GET example_delivery/_search
{
"query" : { "match_all" : {} },
"filter" : {
"nested" : {
"path" : "delivery_times",
"filter" : {
"range" :
{
"delivery_times.local_area.cut_off_datetime" : {
"gte": "now"
}
}
}
}
}
}
私はアレイ全体の照会について賢くなる必要があるかどうか思ったんだけど、と:でも、ちょうど空のセットで将来の結果では、カットオフタイムを持っているマッチした製品を取得これをインライン・グルーヴィーで行いますが、これを行うためのより簡単な方法があるかどうか疑問に思っています。