[アップデート] Amazon Location Service でインデックスの検索結果に場所のカテゴリを示す情報が追加されました

2023.06.16

いわさです。

Amazon Location Service では AWS SDK でデータプロバイダのインデックスを使った場所の検索を行うことが出来ます。

検索を行う際により検索精度を高めるためにいくつかのオプションを使うことが出来ます。
ベーシックなテキストや位置情報の検索に加えて、検索基準となる位置情報や国などの情報を設定して検索することが出来ていました。

本日のアップデートで新たに検索結果に場所のカテゴリを示す情報が追加され、検索時にカテゴリを使ったフィルタリングが出来るようになりました。

検索結果にカテゴリ情報が追加

Amazon Location Service ではsearch-place-index-for-textなどの API を使うことで検索した場所の情報を取得することが出来ます。

最新版の AWS CLI v1.27.154 以降は検索結果にカテゴリ情報が追加されるようになりました。

以前の検索結果

% aws location search-place-index-for-text --index-name explore.place --text "札幌"                                  
{
    "Results": [
        {
            "Place": {
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        141.42673600000012,
                        43.07917000000003
                    ]
                },
                "Interpolated": false,
                "Label": "北海道札幌市白石区札幌",
                "Municipality": "白石区",
                "Region": "北海道"
            },
            "Relevance": 1
        },
        {
            "Place": {
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        139.18507793900005,
                        36.17862600700005
                    ]
                },
                "Interpolated": false,
                "Label": "埼玉県児玉郡美里町札幌",
                "Region": "埼玉県",
                "SubRegion": "児玉郡"
            },
            "Relevance": 1
        },
        {
            "Place": {
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        141.36628249000012,
                        43.050754195000025
                    ]
                },
                "Interpolated": false,
                "Label": "北海道札幌市豊平区札幌",
                "Municipality": "豊平区",
                "Region": "北海道"
            },
            "Relevance": 1
        },
:

新しい検索結果

% aws-v1 location search-place-index-for-text --index-name explore.place --text "札幌"                               
{
    "Results": [
        {
            "Place": {
                "Categories": [
                    "PointOfInterestType"
                ],
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        141.42673600000012,
                        43.07917000000003
                    ]
                },
                "Interpolated": false,
                "Label": "北海道札幌市白石区札幌",
                "Municipality": "白石区",
                "Region": "北海道",
                "SupplementalCategories": [
                    "Other Travel"
                ]
            },
            "Relevance": 1
        },
        {
            "Place": {
                "Categories": [
                    "PointOfInterestType"
                ],
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        139.18507793900005,
                        36.17862600700005
                    ]
                },
                "Interpolated": false,
                "Label": "埼玉県児玉郡美里町札幌",
                "Region": "埼玉県",
                "SubRegion": "児玉郡",
                "SupplementalCategories": [
                    "Other Restaurant"
                ]
            },
            "Relevance": 1
        },
        {
            "Place": {
                "Categories": [
                    "PointOfInterestType",
                    "School"
                ],
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        141.36628249000012,
                        43.050754195000025
                    ]
                },
                "Interpolated": false,
                "Label": "北海道札幌市豊平区札幌",
                "Municipality": "豊平区",
                "Region": "北海道"
            },
            "Relevance": 1
        },
:

サポートされているカテゴリの一覧は次の公式ドキュメントから確認することが出来ます。

カテゴリは場所の種類と POI の 2 つのタイプが存在するようです。
上記の検索結果からすると、検索結果のカテゴリにはこの 2 つは混在して表示されるようです。この感じだとPointOfInterestTypeと POI カテゴリはどちらも表示される感じでしょうかね。

いくつか試してみましたが複数の POI が表示されるものは見つけられませんでした。

検索時にカテゴリを使ってフィルタリング

検索時のオプションにfilter-categoriesが追加されています。
今までもCountryなどでフィルタリングが出来ていましたが、今回のアップデートでこのカテゴリを指定したフィルタリングも出来るようになりました。

次は検索時にカテゴリ「School」を指定する例です。

% aws-v1 location search-place-index-for-text --index-name explore.place --text "札幌" --filter-categories "School"
{
    "Results": [
        {
            "Place": {
                "Categories": [
                    "PointOfInterestType",
                    "School"
                ],
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        141.36628249000012,
                        43.050754195000025
                    ]
                },
                "Interpolated": false,
                "Label": "北海道札幌市豊平区札幌",
                "Municipality": "豊平区",
                "Region": "北海道"
            },
            "Relevance": 1
        },
        {
            "Place": {
                "Categories": [
                    "PointOfInterestType",
                    "School"
                ],
                "Country": "JPN",
                "Geometry": {
                    "Point": [
                        141.37835122600006,
                        43.094976673000076
                    ]
                },
                "Interpolated": false,
                "Label": "北海道札幌市東区札幌",
                "Municipality": "東区",
                "Region": "北海道"
            },
            "Relevance": 1
        }
    ],
    "Summary": {
        "DataSource": "Esri",
        "FilterCategories": [
            "School"
        ],
        "MaxResults": 50,
        "ResultBBox": [
            141.36628249000012,
            43.050754195000025,
            141.37835122600006,
            43.094976673000076
        ],
        "Text": "札幌"
    }
}

予めサポートされているカテゴリを SDK 利用側が知っておく必要はありますが、検索精度を上げる用途で活用出来そうです。

データプロバイダによって対応状況が違うので注意

このカテゴリですが、データプロバイダによって対応状況が全く異なっていますのでこの点はよく注意が必要です。
次の公式ドキュメントにもデータプロバイダごとに何がサポートされているか記述されています。

Esri はほぼサポートされています。
Here は POI カテゴリでのフィルタリングはサポートされていませんが、SearchPlaceIndexForSuggestionsでもカテゴリ情報が取得出来るようです。
また、Grap と Open Data についてはカテゴリ自体がサポートされていません。

試しに Here のインデックスで POI カテゴリでフィルタリングしてみたところ次のようにエラーとなりました。

% aws-v1 location search-place-index-for-text --index-name iwasa.here --text "東京都" --filter-categories "Airport"

An error occurred (ValidationException) when calling the SearchPlaceIndexForText operation: 'FilterCategories' contains the following entries that are not supported for 'DataSource' Here: Airport.
% aws-v1 location search-place-index-for-text --index-name iwasa.here --text "東京都" --filter-categories "AddressType"
{
    "Results": [],
    "Summary": {
        "DataSource": "Here",
        "FilterCategories": [
            "AddressType"
        ],
        "MaxResults": 50,
        "Text": "東京都"
    }
}

さいごに

本日は Amazon Location Service でインデックスの検索結果に場所のカテゴリを示す情報が追加されたので使ってみました。

検索精度向上のオプションが追加されるのは非常に良いですね。
データプロバイダ側の検索結果などに依存している部分はそもそもありますが、利用者側で少しでもコントロール出来るのは良いです。

一方でデータプロバイダによってはそもそも使えなかったりするので設計時など注意したいところです。