2017-10-05 260 views
0

我试图使用ElasticSearch我只是想实现范围过滤器,我下面的数据来实现过滤器:如何在ElasticSearch中使用过滤器?

{ 
    "result": [ 
    { 
     "Id": "144039", 
     "posted_dt": 1506951883637, 
     "submit_dt": 1507609800000, 
     "title": "Request for Information (RFI) # 306-18-0018", 
     "fname": "RODRI", 
     "email": "", 
     "desc": "dummy Text" 
    } 
    ] 
} 

我想从最近3天或5天,我用这个数据:

query = { 
"bool": { 
    "must": [ 
    { 
     "range" : { 
      "posted_dt" : { 
       "gte" : "now-3d/d", 
       "lt" : "now/d" 
      } 
     } 
    } ]  
} 

}

我对posted_dt映射:

"posted_dt": { 
      "type": "long" 
      }, 

我也尝试过滤器,但没有成功。

请帮忙。

感谢

Randheer

+0

你试过'“lt”:“现在”吗? – Val

+0

是的,但没有成功 –

回答

0

首先,你需要共享你的映射。其实请确保posted_dtsubmit_dt在您的映射中被定义为date。这里您使用的是long,这是不正确的处理日期。

一个方面说明,你应该使用filter而不是must你的情况。 IMO会更快。

+0

感谢这里您的留言是我posted_dt 映射'“posted_dt”:{ “类型”:“长” }' 我确实使用了过滤器,以及,但它没”吨工作:( –

+0

我编辑我的文章。 – dadoonet

1

您对"posted_dt"的映射字段不正确。您打算存储以毫秒为时间的日期,但您将其存储为长类型。所以日期范围过滤器不适用于长数据类型。更新您"posted_dt"领域的映射,如:

PUT my_index 
{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "posted_dt": { 
      "type": "date", 
      "format": "epoch_millis" 
     } 
     } 
    } 
    } 
} 

在Elasticsearch参考Date datatype