Elasticsearch Php日期映射,过滤和搜索

时间:2016-02-04 14:31:52

标签: php elasticsearch

请帮帮我。我使用的是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;    
 }

有什么问题?

2 个答案:

答案 0 :(得分:0)

您的格式字符串在天和小时之间有空格,您的示例网址没有:

$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 :(得分:0)

我修好了它:

示例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 01: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

第二个例子,结果是正确的,但其他错误