请帮助我。我正在使用php 5.5和Elasticsearch 2.1。我想在历史中排名。但是我的日期过滤器无法正常工作。
当我仅在日期之间进行查询时,我得到了准确的结果。但是,当我使用日期mont,day和hour进行查询时,我没有得到准确的结果。
例如:
http://10.0.2.15:8080/filter.php?my_date_try&my_date_lte=2017/12/3123:59:59&my_date_gte=2016/01/0100:00:00
结果不正确。
示例 2:
http://10.0.2.15:8080/filter.php?my_date_try&my_date_lte=2017&my_date_gte=2016
结果是正确的。
我的日期映射:
$myTypeMapping['properties']['my_date']['type']='date';
$myTypeMapping['properties']['my_date']['index']='not_analyzed';
$myTypeMapping['properties']['my_date']['format']='yyyy/MM/dd HH:mm:ss';
我的日期过滤器 :
unset($filter_my_date);
if(isset($_GET[my_date_try])){
$filter_my_date['range']['my_date']['lte']=$_GET['my_date_lte'];
$filter_my_date['range']['my_date']['gte']=$_GET['my_date_gte'];
$filter_my_date['range']['my_date']['format']='yyyy/MM/dd HH:mm:ss';
}
if(is_array($filter_my_date)){
$searchParams['body']['query']['bool']['must']=$filter_my_date;
}
问题出在哪里?
格式字符串在天和小时之间有一个空格,您的示例网址没有:
$myTypeMapping['properties']['my_date']['format']='yyyy/MM/dd HH:mm:ss';
^
http://10.0.2.15:8080/filter.php?my_date_try&my_date_lte=2017/12/3123:59:59&my_date_gte=2016/01/0100:00:00
^ ^
我修复了它:
示例 1:
http://10.0.2.15:8080/filter.php?my_date_try&my_date_lte=2017/12/31 23:59:59&my_date_gte=2016/01/01 00:00:00
示例 2:
http://10.0.2.15:8080/filter.php?my_date_try&my_date_lte=2017&my_date_gte=2016
示例3:我也只写了日期而没有时间:
http://10.0.2.15:8080/filter.php?my_date_try&my_date_lte=2017/12/31 &my_date_gte=2016/01/01
第二个例子,结果是正确的,但其他的都是错误的