フィールドの場所が正しくマップされていないため、このエラー メッセージが表示されます。ある時点で、このフィールドで文字列のインデックスを作成しようとしたことがあり、現在は文字列としてマップされている可能性があります。Elasticsearch は、フィールドに geo_point が含まれていることを自動的に検出できません。マッピングで明示的に指定する必要があります。それ以外の場合、Elasticsearch は、最初のインデックス付きレコードで使用した geo_point 表現のタイプに応じて、文字列、数値、またはオブジェクトなどのフィールドをマップします。フィールドがマッピングに追加されると、そのタイプは変更できなくなります。そのため、状況を修正するには、このタイプのマッピングを削除して、再度作成する必要があります。geo_point フィールドのマッピングを指定する例を次に示します。
curl -XDELETE "localhost:9200/geo-test/"
echo
# Set proper mapping. Elasticsearch cannot automatically detect that something is a geo_point:
curl -XPUT "localhost:9200/geo-test" -d '{
"settings": {
"index": {
"number_of_replicas" : 0,
"number_of_shards": 1
}
},
"mappings": {
"doc": {
"properties": {
"location" : {
"type" : "geo_point"
}
}
}
}
}'
echo
# Put some test data in Sydney
curl -XPUT "localhost:9200/geo-test/doc/1" -d '{
"title": "abcccc",
"price": 3300,
"price_per": "task",
"location": { "lat": -33.8756, "lon": 151.204 },
"description": "asdfasdf"
}'
curl -XPOST "localhost:9200/geo-test/_refresh"
echo
# Search, and calculate distance to Brisbane
curl -XPOST "localhost:9200/geo-test/doc/_search?pretty=true" -d '{
"query": {
"match_all": {}
},
"script_fields": {
"distance": {
"script": "doc['\''location'\''].arcDistanceInKm(-27.470,153.021)"
}
},
"fields": ["title", "location"]
}
'
echo