【问题标题】:How can I parse a GeoPoint value out of an ElasticSearch response in Java?如何从 Java 中的 ElasticSearch 响应中解析 GeoPoint 值?
【发布时间】:2020-04-03 11:15:18
【问题描述】:

我正在使用 Elastic 的 Java 高级 REST 客户端从 Java 中搜索弹性搜索索引。

我的回复是这样的……

  {
    "took": 25,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 10000,
            "relation": "gte"
        },
        "max_score": 2,
        "hits": [
            {
                "_index": "contacts_1_rvmmtqnnlh",
                "_type": "_doc",
                "_id": "1",
                "_score": 2,
                "_source": {
                    "location": {
                        "lon": -71.34,
                        "lat": 41.12
                    }
                }
            },
            {
                "_index": "contacts_1_rvmmtqnnlh",
                "_type": "_doc",
                "_id": "5291485",
                "_score": 2,
                "_source": {
                    "home_address1": "208 E Main ST Ste 230",
                    "firstname": "Geri",
                    "home_city": "Belleville",
                    "location": "39.919499456869055,-89.08605153191894",
                    "lastname": "Boyer"
                }
            },
            ...
            {
                "_index": "contacts_1_rvmmtqnnlh",
                "_type": "_doc",
                "_id": "5291492",
                "_score": 2,
                "_source": {
                    "home_address1": "620 W High ST",
                    "firstname": "Edna",
                    "home_city": "Nashville",
                    "location": "40.55917440131824,-89.24254785283054",
                    "lastname": "Willis"
                }
            }
        ]
    }
}

如何解析出每个命中文档的纬度和经度?纬度和经度存储在 GeoPoint 类型的名为“location”的字段中

这是我尝试过的......

        SearchHit[] hits = searchResponse.getHits().getHits();
        for (SearchHit hit : hits) {
        Map<String, Object> contactMap = hit.getSourceAsMap();
        LinkedHashMap<String, Object> contactLHM = new LinkedHashMap<>(contactMap);
        Object coordinate = contactLHM.get("location");
        location.latitude = ?????? 
        location.longitude = ????? 

}

如果坐标变量的值为

,如何解析出纬度和经度

{lon=-71.34, lat=41.12}

顺便说一下,这是位置类定义:

    public static class Location{
    public Double latitude;
    public Double longitude;
}

【问题讨论】:

    标签: java elasticsearch resthighlevelclient elasticsearch-high-level-restclient


    【解决方案1】:

    这里的source表示你保存了不同_source的文档。 您可以使用geo_point type 来做到这一点,当然,也可以使用相同的查询来查询它们。基本上,elasticsearch 理解这两种格式并将它们分析为相同的结构(纬度、经度),但这并不意味着它会改变您的来源(这正是您保存的数据)。

    首先,如果这是一个选项,您只需要以一种方式保存数据,因此 _source 总是相同的。如果这不是一个选项,那么您需要处理这两种格式(位置作为字符串,位置作为纬度和经度的对象)。此外,您可以通过脚本更新您的 _source。

    https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html

    【讨论】:

    • 您能否提供/指出一个通过 Java 高级 REST 客户端通过脚本更改 geo_point _source 字段的示例?如果不可能,那么我会在 Postman 中这样做。
    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多