所以我正在试验ElasticSearch,这就是我所做的。
1)在我的索引上添加了一个名为“test”的geo_point映射
curl -XPOST localhost:9200/test -d '{
"mappings" : {
"type1" : {
"_source" : { "enabled" : false },
"properties" : {
"location" : { "type" : "geo_point", "index" : "not_analyzed" }
}
}
}
}'
2)索引正在测试的文件:
curl -XPUT 'localhost:9200/test/type1/1?pretty' -d '{
"location" : {
"lat" : 74,
"lon" : 90
}
}'
3)然后用地理定位过滤器写了一个查询:
curl -XPOST 'localhost:9200/test2/_search?pretty' -d '{
"filtered" : {
"query" : {
"match_all" : {}
},
"filter" : {
"geo_distance" : {
"distance" : "200km",
"location" : {
"lat" : 40,
"lon" : -70
}
}
}
}
}'
为此,我得到:
“error”:“SearchPhaseExecutionException [无法执行阶段 [查询],所有分片都失败了; shardFailures {[QpGEHtdcReeYmt8X2tG26g] [TEST2] [0]: RemoteTransportException [[小丑] [INET [/10.58.91.21:9301] [搜索/相位/查询]]; 嵌套:SearchParseException [[test2] [0]:from [-1],size [-1]:Parse 失败[无法解析源[ na ]]];嵌套: ElasticsearchParseException [无法从中派生xcontent org.elasticsearch.common.bytes.ChannelBufferBytesReference@60d8bc76];
答案 0 :(得分:0)
首先,在您的查询中(即第3段代码),localhost:9200/test2/_search?pretty
应为localhost:9200/test/_search?pretty
,即您没有查询正确的索引。
然后您的查询遗漏了query
关键字(即filtered
应该包含在query
中),它应如下所示:
curl -XPOST 'localhost:9200/test/_search?pretty' -d '{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"geo_distance": {
"distance": "200km",
"location": {
"lat": 40,
"lon": -70
}
}
}
}
}
}