エラスティック検索の Geo Bounding Box 機能を使用して、選択したボックスに結果を返そうとしています。Google マップから境界座標を取得します。これは北東と南西の形式です。
これは、elasticsearch php クライアントに渡されるパラメーターのサンプル ダンプです (読みやすいように JSON に変換されています)。
{
"index":"MyIndex",
"body":{
"query":{
"bool":{
"must":{
"match_all":{
}
},
"filter":{
"geo_bounding_box":{
"location":{
"top_right":{
"lat":53.2323104,
"lon":6.704821
},
"bottom_left":{
"lat":52.3136724,
"lon":4.311799
}
}
}
}
}
}
}
}
以下は、ES での結果の例です。通常の単純な検索 (地理/境界ボックスなし) を実行すると返されます。
[
{
"object_id":14396,
"object_type":"POI",
"location":{
"lat":53.05194,
"lon":5.38417
}
},
{
"object_id":24046,
"object_type":"POI",
"location":{
"lat":52.52711,
"lon":5.06319
}
},
{
"object_id":24680,
"object_type":"POI",
"location":{
"lat":52.72525,
"lon":4.96201
}
}
]
これらはすべて境界ボックス検索によって返されるはずだと思いますが、ここで何が欠けていますか?
編集:以下のマッピングが含まれています
{
"MyIndex":{
"mappings":{
"pois":{
"properties":{
"object_id":{
"type":"string"
},
"object_type":{
"type":"string"
},
"location":{
"type":"geo_point"
},
}
},
}
}
}
編集 2: ES のデータを含む生の応答:
{
"_index":"MyIndex",
"_type":"pois",
"_id":"14916",
"_score":1,
"_source":{
"object_id":"14916",
"object_type":"POI",
"location":{
"lat":53.13915,
"lon":6.19422
}
}
}