DjangoとAWS OpenSearchを接続する方法に関するメモです。以下の記事が参考になりました。
https://testdriven.io/blog/django-drf-elasticsearch/
ただし、上記の記事はElasticsearchを対象にした設定のため、OpenSearchに応じた変更が必要です。
変更点#
以下のElasticsearch Setupの部分から、OpenSearchに応じた変更が必要でした。
https://testdriven.io/blog/django-drf-elasticsearch/#elasticsearch-setup
具体的には、以下の2つのライブラリが必要でした。
その後は、django_elasticsearch_dslとなっている箇所をdjango-opensearch-dslに、elasticsearch_dslをopensearchpyに書き換えることで、記事の通りに進めることができました。
例えば、以下のような形です。
Populate Elasticsearch#
Elasticsearchを対象にした上記の記事では、以下のコマンドが紹介されています。
一方、OpenSearchの場合は、以下のコマンドが必要でした。
インデックスの作成#
ドキュメントの登録#
インデックスのリビルド#
その他:analyzerとfieldsの追加#
以下の部分に記載されているField Classesを試します。
https://django-opensearch-dsl.readthedocs.io/en/latest/fields/#field-classes
以下の例では、usernameについて、html_stripというanalyzerと、Keywordフィールドを設定しています。
上記の結果、以下のようなマッピングがOpenSearchに登録されました。
username.rawを使用することで、ソートやアグリゲーションが可能となります。以下がviewsの例です。-を与えることで、降順になるようです。
まとめ#
DjangoとAWS OpenSearchの接続にあたり、参考になりましたら幸いです。