java - 如何在Java中从ElasticSearch响应中解析GeoPoint值?

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

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

我的回应是这样的...

  {
    "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;
}

最佳答案

此处的来源表示您使用不同的_source保存了文档。
您可以使用geo_point type进行此操作,当然也可以使用相同的查询进行查询。基本上,elasticsearch会理解这两种格式并将其分析为相同的结构(纬度,经度),但这并不意味着它将更改您的源(正是您保存的数据)。

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

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

关于java - 如何在Java中从ElasticSearch响应中解析GeoPoint值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61010641/

相关文章:

java - 无法使用 HttpURLConnection 连接到 https

java - 无法从切换按钮到第二个 Activity 获取值

java - 如何从 Java 使用 Prolog?

elasticsearch - 如何在脚本分数中使用字段的最大分数 - ElasticSearch

elasticsearch - 从哪里开始阅读有关ELK堆栈的信息?

spring - 如何将Spring Boot与Elasticsearch 7.3连接

java - 线性 graphView 没有排序 arraylist

reactjs - 当需要在数组类型的弹性场上进行搜索时,没有显示有关DataSearch的建议

elasticsearch - 记录通过ElasticSearch高级Java客户端构建的JSON查询以进行调试?

java - 使用Java Rest高级客户端的Elasticsearch Node IP地址和其他详细信息