elasticsearch,Php,elasticsearch" /> elasticsearch,Php,elasticsearch" />

Elasticsearch Php日期映射、筛选和搜索

Elasticsearch Php日期映射、筛选和搜索,php,elasticsearch,Php,elasticsearch,请帮帮我。我正在使用PHP5.5和ElasticSearch2.1。我想做历史排名。但是我的日期过滤器不能正常工作 当我只在两个日期之间进行查询时,我得到了准确的结果。但是,当我使用日期mont、day和hour进行查询时,我没有得到准确的结果 例如: $myTypeMapping['properties']['my_date']['type']='date'; $myTypeMapping['properties']['my_date']['index']='not_analyzed'

请帮帮我。我正在使用PHP5.5和ElasticSearch2.1。我想做历史排名。但是我的日期过滤器不能正常工作

当我只在两个日期之间进行查询时,我得到了准确的结果。但是,当我使用日期mont、day和hour进行查询时,我没有得到准确的结果

例如:

$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:

$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']['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']['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;    
 }

问题出在哪里?

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

$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:

$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;    
 }
23:59:59和我的日期=2016/01/01 00:00:00

示例2:

$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;    
 }

示例3:我只写了日期,没有时间:

$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;    
 }
&my_date_gte=2016/01/01

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