Elasticsearch Php日期映射、筛选和搜索
请帮帮我。我正在使用PHP5.5和ElasticSearch2.1。我想做历史排名。但是我的日期过滤器不能正常工作 当我只在两个日期之间进行查询时,我得到了准确的结果。但是,当我使用日期mont、day和hour进行查询时,我没有得到准确的结果 例如: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'
$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
第二个例子,结果是正确的,但是其他的都是错误的