私はelasticsearchバージョン1.3.2に対して、この投稿の時点で最新のelasticsearch Riverプラグインバージョン1.3.0.4を使用しています。geo_point タイプでマッピングを作成しようとしていますが、失敗し続けています... これが私のマッピングです:
PUT /_river/tehotels/_meta
{
"type": "jdbc",
"jdbc": {
"driver": "com.mysql.jdbc.Driver",
"url": "jdbc:mysql://localhost:3306/blah",
"user": "",
"password": "",
"sql": "select id,hotel_id,hotel_name,hotel_url,hotel_address,overview,city_id,star_rating,latitude as \"location.lat\",longitude as \"location.lon\" from agoda_hotels",
"strategy": "simple",
"autocommit": true,
"fetchsize": 10,
"max_rows": 0,
"max_retries": 3,
"max_retries_wait": "30s",
"maxbulkactions": 1000,
"maxconcurrentbulkactions": 8,
"index": "teindex8",
"type": "hotels",
"type_mapping": {
"hotels": {
"properties": {
"_id": {
"type": "long"
},
"hotel_id": {
"type": "long"
},
"hotel_name": {
"type": "string"
},
"hotel_url": {
"type": "string",
"index": "no"
},
"hotel_address": {
"type": "string",
"index": "no"
},
"overview": {
"type": "string",
"index": "no"
},
"city_id": {
"type": "long",
"index": "no"
},
"star_rating": {
"type": "float"
},
"location": {
"type": "geo_point"
}
}
}
}
}
}
しかし、_mapping
コマンドを実行すると、次のように表示されます。
{
"teindex8": {
"mappings": {
"hotels": {
"properties": {
"city_id": {
"type": "long"
},
"hotel_address": {
"type": "string"
},
"hotel_id": {
"type": "long"
},
"hotel_name": {
"type": "string"
},
"hotel_url": {
"type": "string"
},
"id": {
"type": "long"
},
"location": {
"properties": {
"lat": {
"type": "string"
},
"lon": {
"type": "string"
}
}
},
"overview": {
"type": "string"
},
"star_rating": {
"type": "double"
}
}
}
}
}
}
「場所」は geo_point タイプではなく、プロパティのリストであることに注意してください。疑わしいように、場所を検索するクエリを発行すると、次のエラーが発生しました。
POST /teindex8/hotels/_search
{
"query": {
"filtered": {
"filter": {
"geo_distance": {
"distance": "20 km",
"location": "13.441111, 103.858611"
}
}
}
}
}
結果:
QueryParsingException[[teindex8] failed to find geo_point field [location]];
誰かが問題を解決する方法を知っていますか? ドキュメントに正確に従ったようです...