使用正确的数据库进行大规模地理空间查询(ElasticSearch)

时间:2017-09-24 13:52:58

标签: mongodb elasticsearch gis geospatial data-warehouse

目前,我们的ElasticSearch实例包含大约100米以上的记录,其中包含lat / lng,created_at,item_id和user_id。我们想回答这些问题:

1)在过去的T天里,附近的X,Y中有多少个item_id,半径为Z?

2)在过去的T天中,有多少独特用户是附近的X,Y,半径为Z?

3)在过去的T天内,每个月有多少项目和唯一用户是附近的X,Y,半径为Z,按月分组?

我们已经尝试过MongoDB,MySQL和现在的ElasicSearch,而且我们在性能方面一直处于领先地位(持续低于5秒)。这是迁移到数据仓库模型的唯一解决方案,如Redshift?有人有什么建议吗?

以下是要获取的搜索查询

GET items/item/_search
{
   "query": {
      "filtered": {
         "filter": {
            "bool": {
               "must": [
                  {
                     "geo_distance": {
                        "distance": "10mi",
                        "loc": {
                           "lat": 40.712784,
                           "lon": -74.005941
                        }
                     }
                  },
                  {
                     "range": {
                        "cat": {
                           "gte": "now-1d/d",
                           "lte": "now/d"
                        }
                     }
                  }
               ]
            }
         }
      }
   },
   "aggs": {
      "distinct_users": {
         "cardinality": {
            "field": "uid.hash"
         }
      },
      "distinct_checkins": {
         "cardinality": {
            "field": "iid.hash"
         }
      }
   },
   "size": 1
}

0 个答案:

没有答案