弹性搜索 - 对批量导入的JSON

时间:2015-06-28 10:12:11

标签: geolocation elasticsearch

我有一个包含JSON文档的文件 modified.json ,其中包含以下内容:

{"index":{"_index": "trial", "_type": "trial", "_id":"1"}}
{"clinics" : [{"price": 1048, "city": "Bangalore", "Location": {"lon": 77.38381692924742, "lat": 12.952155989068519}}, {"price": 1048, "city": "Bangalore", "Location": {"lon": 77.38381692924742, "lat": 12.952155989068519}}]

....还有更多类似的文件。我正在通过此命令运行批量插入:

curl -s -XPOST 'http://localhost:9200/_bulk' --data-binary @modified.json

接下来,通过 Sense(谷歌浏览器)插件,我发出以下请求

服务器:localhost:9200 / trial / trial

PUT _search
{
    "mappings": {
        "clinics": {
            "properties": {
                "Location": {"type": "geo_point"}
            }
        }
    }
}

我不知道这是否为“位置”字段创建了映射。 发出搜索请求后,如下所示:

服务器:localhost:9200 / trial / trial

GET _search
{
    "query": {
        "filtered" : {
            "query" : {
                "match_all" : {}
            },
            "filter" : {
                "geo_distance" : {
                    "distance" : "20km",
                    "Location" : {
                        "lat" : 12.958487287824958,
                        "lon" : 77.69648881178146
                    }
                }
            }
        }
    }
}

我收到一条错误说: 找不到geo_point字段[Location]]; }]",

请帮我解决这个问题。此外,如果可能的话,还可以指导我如何对这些数据进行分面搜索,以显示距离范围内的诊所:例如20到30公里

1 个答案:

答案 0 :(得分:0)

您需要撤消订购。首先放置映射映射,然后执行批量插入。

通过在插入之前放置地图,您可以让ES知道数据类型是什么,以便它可以正确地索引它们。 ES允许您将映射添加到现有索引,但已经存在的数据不会自动重新编制索引。 (这是一个已知问题)。