正在寻找帮助我使用ElasticSearch的人

时间:2016-11-20 23:43:42

标签: elasticsearch geolocation geospatial geopoints nosql

我是ElasticSearch的初学者。我正在尝试测试地理位置列表中是否存在地理位置(纬度/经度)列表。

例如我给这个地点:

"lat": 49.01536940596998
"lon": 2.4967825412750244

我想测试下面列表中是否存在这一点。感谢。

"positions": [
    {
      "millis": 12959023,
      "lat": 49.01525113731623,
      "lon": 2.4971945118159056,
      "rawX": -3754,
      "rawY": 605,
      "rawVx": 0,
      "rawVy": 0,
      "speed": 9.801029291617944,
      "accel": 0.09442740907572084,
      "grounded": true
    },
    {
      "millis": 12959914,
      "lat": 49.01536940596998,
      "lon": 2.4967825412750244,
      "rawX": -3784,
      "rawY": 619,
      "rawVx": -15,
      "rawVy": 7,
      "speed": 10.841861737855924,
      "accel": -0.09534648619563282,
      "grounded": true
    }
...
}

1 个答案:

答案 0 :(得分:1)

为了能够搜索对象数组,您需要使用nested data type。正如链接页面所解释的那样,为了使数组的内部元素保持独立,您不能使用默认映射。首先,您必须更新映射。

注意:映射仅对新索引生效。 Reference.

PUT YOUR_INDEX
{
  "mappings": {
    "YOUR_TYPE": {
      "properties": {
        "positions": {
          "type": "nested" 
        }
      }
    }
  }
}

现在我们可以查询数据了。您正在寻找一个bool query,它结合了其他查询(在您的情况下为term queries)。

POST _search
{
  "query": {
    "nested": {
      "path": "positions",
      "query": {
        "bool" : {
          "must" : [
            { "term" : { "lat": 49.01536940596998  } },
            { "term" : { "lon": 2.4967825412750244 } }
          ]
        }
      }
    }
  }
}