我正在研究用例的弹性搜索,在其中我需要做等同于以下SQL查询的操作: 基本上计算与第一条和最后一条匹配记录部分匹配的航班的分钟差。
ORACLE查询将像这样:
CTE AS (从FA_PAIR_DUTY_FLT_LEG WHERE DEST_ARPT_CD ='ORD'和SCHED_LCL_DEP_DTM从'04 -MAY-19 18.20.00'和'08 -MAY-19 18.20.00'之间的MIN_LCL中选择MIN(SCHED_LCL_DEP_DTM)AS MIN_LCL) SELECT(24 * 60 *(MIN_LCL-to_date('2019-05-04 18.20.00','YYYY-MM-DD HH24:MI:SS'))),MIN_LCL FROM CTE;
Couchbase N1QL查询将像这样:
从CRF_DATA中选择DATE_DIFF_STR(test.minVal,'2019-05-16T09:25:00','minute')作为add_3_days,test.minVal从(选择min(LayoverStartDtm)作为minVal使用索引(gco_layover_pairingDutyFlightLeg_idx_1)其中docType ='PairingDutyFlightLeg'和DestAirportCd ='ORD',IsLayover ='Y',并且(LayoverStartDtm在'2019-05-16T09:25:00'和'2019-05-16T13:45:00')限制10)测试>
请参阅以下样本文档。因此,如果我在查询中的日期范围是
(从-'2019-06-05T02:30:00'到'2019-06-05T19:00:00') 然后
如果我执行sum(fdpVal),则得到60 + 60 = 120,但这不是我想要的。
我想获得要减去的精确时间片,这不是匹配范围的一部分-
(2019-06-05T02:30:00-2019-06-05T02:00:00),这是30分钟。那 所以最后我想进行聚合30 + 60(fdpVal),这对我来说是90正确的值。 或者换句话说120-30 = 90。
{
“ GMTStart”:“ 2019-06-05T02:00:00”,
“ GMTEnd”:“ 2019-06-05T03:00:00”,
“ fdpVal”:60,
“ fileNo”:“ U127092”,
“ pairingId”:“ 21938432”
}
{
“ GMTStart”:“ 2019-06-05T03:01:00”,
“ GMTEnd”:“ 2019-06-05T04:00:00”,
“ fdpVal”:60,
“ fileNo”:“ U127092”,
“ pairingId”:“ 21938432”
}
您能帮我如何在Elasticsearch中实现这一点吗?
答案 0 :(得分:0)
示例问题有点混乱,请重新格式化以方便阅读
我会给您一个示例代码段,希望您能有所想法
$from_date = "2019-06-05T02:00:00";
$to_date = "2019-06-05T03:00:00";
'aggs' => [
//The "DATE_RANGE" string below is just an identifier of the Elasticsearch Aggs portion for your specific range requirement
'DATE_RANGE' => [
"range" => [
"field" => "my_field",
"ranges" => [
[ "from" => $from_date,
"to" => $to_date ],
],
//the "format" below is required if you are specific with your dates' format
'format' => "yy-MMM-dd'T'HH:mm:ss.SSS'Z'",
],
]
]
如有其他问题,请随时发表评论
答案 1 :(得分:0)
经过更多研究后,我找到了解决方法。基本上,我们需要使用脚本(无痛等)来实现,通过基本的过滤器查询可以获取子集数据。
如果需要更多详细信息,请与我联系。