Amazon OpenSearch Serverless(プレビュー) からPythonスクリプトでデータ取得をしてみました

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS re:Invent 2022にて発表された、Amazon OpenSearch Serverless プレビュー版を利用しPythonスクリプトでのデータ投入、OpenSearch UIでの検索を試してみました。
続々と増える「Serverless」をサービス名に入れたよりスケーラビリティが高く、マネージド領域の広いサービス、今年中頃のAuroraServerless v2も好感触でしたので、期待を込めて触ってみました。

目次

はじめに

下記2本立てでお送りします

今回のプレビュー版利用にあたり参考にした/利用したものは下記となります。

内部アーキテクチャ図含む全容の参考

Pythonからのデータ投入/参照プログラム参考

OpenSearch Pythonクライアントサンプルコード

https://opensearch.org/docs/latest/clients/python/

利用準備

前回記事 を参考にOpenSearch Serverlessを構築、Indexを作成しておきます。

検索・クエリするプログラム実行

認証情報はDefaultの物を利用しますので、ご注意下さい。

requirements.txt
get.py
from opensearchpy import OpenSearch, RequestsHttpConnection
from requests_aws4auth import AWS4Auth
import boto3
import json

host = '[作成したコレクションに応じた識別子].ap-northeast-1.aoss.amazonaws.com' # OpenSearch Serverless collection endpoint
region = 'ap-northeast-1' # e.g. us-west-2

service = 'aoss'
credentials = boto3.Session().get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service,
session_token=credentials.token)

# Create an OpenSearch client
client = OpenSearch(
    hosts = [{'host': host, 'port': 443}],
    http_auth = awsauth,
    use_ssl = True,
    verify_certs = True,
    connection_class = RequestsHttpConnection
)
# Specify index name
index_name = 'zip-jp-index'

# Search for the Documents
query = {
    "size": 2,
    "_source": {
        "includes": [
            "zip7digits",
            "PrefName",
            "CityName",
            "TownName"
        ]
    },
    "query": {
        "query_string": {
        "default_field": "CityName",
        "query": "川崎市幸区"
        }
    }
}

response = client.search(
    body = query,
    index = index_name
)
print(response)

実行結果

サンプルコードみたまんまですが、CityName が 「川崎市幸区」 のデータを 2件 取得しています。
Pretty-Printに難儀しそうでしたので、そのままの結果です(汗)

取得したい物、内容の事前確認については前回の記事でも利用したDev Toolsを利用して予め結果を確認しながら実装するのが良さそうです。

まとめ

ここまで取得できれば、APIGateway + LambdaでREST API化等も簡単に実現できそうです。
より良い全文検索ライフを送るため、GAが待ち遠しいサービスの一つとなりました!

投稿者プロフィール

takashi
Japan AWS Ambassadors 2023, 2024
開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て
2010年よりスカイアーチネットワークスに在籍しております

機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。

ABOUTこの記事をかいた人

Japan AWS Ambassadors 2023, 2024 開発会社での ASP型WEBサービス企画 / 開発 / サーバ運用 を経て 2010年よりスカイアーチネットワークスに在籍しております 機械化/効率化/システム構築を軸に人に喜んで頂ける物作りが大好きです。