2013年4月18日木曜日

elasticsearch Tireのgeo filter各種意味の違い

Geo Filterにはいくつか紛らわしいものが存在する。

忘れないようにメモしておく。

Geo distance filter・・・geoのlocationに含まれるものが存在する場合のみ表示する

ex)pin.locationが200km以内に存在するもののみを表示

"filter" : {
            "geo_distance" : {
                "distance" : "200km",
                "pin.location" : {
                    "lat" : 40,
                    "lon" : -70
                }
            }
        }


Geo distance range filter・・・geo distanceの中に幅を持たせたいときに、fromとtoの間に存在するもののみを表示する

ex.)pin.locationから200kmから400kmの距離にあるものを表示

"filter" : {
            "geo_distance_range" : {
                "from" : "200km",
                "to" : "400km"
                "pin.location" : {
                    "lat" : 40,
                    "lon" : -70
                }
            }
        }


geo bounding box filter(geo_bbox)・・・bounding box内にかかれた座標内に存在するものを表示

ex.)top_leftの座標が(40.73, -74.1), bottom_rightの座標が(40.717, -73.99)内にあるものを表示

"filter" : {
            "geo_bounding_box" : {
                "pin.location" : {
                    "top_left" : {
                        "lat" : 40.73,
                        "lon" : -74.1
                    },
                    "bottom_right" : {
                        "lat" : 40.717,
                        "lon" : -73.99
                    }
                }
            }
        }


geo polygon filter・・・3点の三角形の座標内に存在するものを表示

ex.)座標1(40, -70) 座標2(30, -80) 座標3(20, -90)内に存在するものを表示

"filter" : {
            "geo_polygon" : {
                "person.location" : {
                    "points" : [
                        {"lat" : 40, "lon" : -70},
                        {"lat" : 30, "lon" : -80},
                        {"lat" : 20, "lon" : -90}
                    ]
                }
            }
        }


geo shape filter・・・geo shape Mappingをしている必要がある。説明割愛。