我的数据中有一个日期字段为
"type": "date",
"format": "dateOptionalTime"
现在我的日期字段和值是 -
"INITIAL_EXTRACT_DATE" : "2015-04-02T06:47:57.78+05:30"
在搜索时我只根据“2015-04-02”的日期进行搜索。 但我得到0结果。
任何人都可以建议如何搜索确切的日期,并且是任何日期。
现在我正在尝试这个 -
确切日期 -
"term": {
"IH_PT_DSC": {
"value": "2015-04-02"
}
}
对于任何日期 -
"terms": {
"IH_PT_DSC": [
"2015-04-02",
"2015-04-03",
"2015-04-03"
]
}
答案 0 :(得分:3)
您可以使用range
filter来gte
/ lte
使用format
和{
"constant_score": {
"filter": {
"range" : {
"IH_PT_DSC" : {
"gte": "2015-04-02",
"lte": "2015-04-02",
"format": "yyyy-MM-dd"
}
}
}
}
}
参数,只指定日期部分(即离开出时间部分)
{
"constant_score": {
"filter": {
"range" : {
"IH_PT_DSC" : {
"gte": "2015-04-01",
"lte": "2015-04-03",
"format": "yyyy-MM-dd"
}
}
}
}
}
如果您需要指定多个日期,也可以轻松完成。
bool/should
最后,如果您需要查询不相交的日期间隔,只需使用{
"constant_score": {
"filter": {
"bool": {
"should": [
{
"range": { <--- interval 1
"IH_PT_DSC": {
"gte": "2015-04-01",
"lte": "2015-04-03",
"format": "yyyy-MM-dd"
}
}
},
{
"range": { <--- interval 2
"IH_PT_DSC": {
"gte": "2015-04-05",
"lte": "2015-04-08",
"format": "yyyy-MM-dd"
}
}
},
{
"range": { <--- interval 3
"IH_PT_DSC": {
"gte": "2015-04-10",
"lte": "2015-04-12",
"format": "yyyy-MM-dd"
}
}
}
]
}
}
}
}
过滤器:
select emp_id, max(promo_date)
from promotions
group by emp_id;
答案 1 :(得分:2)
您确实应该使用date range query和格式参数(但更简单,如上一个答案所述)
确切日期
{
"range": {
"IH_PT_DSC": {
"value": {
"gte": "2015-04-02||/d",
"lte": "2015-04-02||/d"
}
}
}
}
For Is of date - 使用布尔过滤器&#34;应该&#34;不同的块在一起
{
"bool": {
"should": [{
"range": {
"IH_PT_DSC": {
"value": {
"gte": "2015-04-02||/d",
"lte": "2015-04-02||/d"
}
}
}
}, {
"range": {
"IH_PT_DSC": {
"value": {
"gte": "2015-06-07||/d",
"lte": "2015-06-07||/d"
}
}
}
}
]
}
}