【问题标题】:Looking for someone to help me with ElasticSearch寻找帮助我使用 ElasticSearch 的人
【发布时间】:2016-11-20 23:43:41
【问题描述】:

我是 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
    }
...
}

【问题讨论】:

    标签: elasticsearch geolocation geospatial geopoints nosql


    【解决方案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 } }
              ]
            }
          }
        }
      }
    }
    

    【讨论】:

    • 既然要修改映射,为什么不同时为纬度/经度值引入geo_point 字段?
    • @fylie 谢谢它对我们有用,实际上我们正在处理一个包含大量数据(位置)的大文档,当我们尝试直接从感觉扩展添加这些文档时它会阻塞,所以什么是将此大数据添加到弹性搜索的最佳解决方案以及如何优化请求时间,因为获得结果需要时间。
    • @Val ,我尝试为纬度/经度值引入 geo_point 字段,但我收到错误消息,告诉我我不能这样做,因为职位由许多其他字段组成跨度>
    • 您需要在positions 之一中创建一个geo_point 字段,而不是使positions 成为geo_point 字段
    • @Val 是的,我明白这一点,但我的问题是我得到了这样的文件或文件,它代表了大量的文件,我问是否有办法创建一个geo_point 每个位置内的字段与elasticsearch 或其他解决方案。你有什么想法吗?
    最近更新 更多