OpenSearchサーバーレスを使う前に知っておきたいデメリットを紹介

OpenSearchサーバーレスを使う前に知っておきたいデメリットを紹介

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

こんにちは!

OpenSearchサーバーレスを使う際には、デメリットもあることを知っておく必要があります。本記事では、OpenSearchサーバーレスを使う前に知っておきたいデメリットについて解説します。

はじめに

OpenSearchサーバーレスは、サーバーレスアーキテクチャを使用して、AWS上で検索エンジンを構築するためのサービスです。OpenSearchサーバーレスを使うことで、検索エンジンを構築する際に必要なインフラストラクチャの構築や管理を行う必要がなくなり、検索エンジン構築を容易に行うことができます。

しかし、OpenSearchサーバーレスを使う際には、デメリットもあることを知っておく必要があります。本記事では、OpenSearchサーバーレスを使う前に知っておきたいデメリットについて解説します。

OpenSearchサーバーレスのデメリット

OpenSearchサーバーレスを使う際には、以下のようなデメリットがあります。

1. インデックス作成に時間がかかる

OpenSearchサーバーレスを使う際には、インデックスを作成する必要があります。インデックスの作成には、検索対象のデータを収集し、そしてインデックス作成するための時間がかかります。

そのため検索対象のデータ発生に対し、リアルタイムな検索を実現することは難しいです。リアルタイム性の要件を考慮して使用する必要があります。

2. 検索用途によっては検索精度が低い

デフォルトで日本語のアナライザーが用意されていますが、用途次第では検索精度の低さを感じます。そのため、例えば不動産業界、建築業界など用途が限定的であれば、辞書情報などはチューニングするなどして、検索精度を向上させる必要があります。

3. インデックスのサイズの考慮が必要

DynamoDBのStreamと連携してインデックス生成する場合などに、検索対象のアイテムをすべてインデックス登録するとボリュームが大きくなり、検索速度の低下や、最悪の場合サーバーが停止します。検索要件に応じて、最小限の情報でインデックス設計を行う必要があります。

4. インデックスの更新に時間がかかる

インデックスを更新する際には、インデックスを再作成する必要があります。このため、インデックスを更新する際には、作成と比較して時間がかかる可能性があります。

実装例

OpenSearchサーバーレスを使う際には、インデックスを作成する必要があります。以下のサンプルプログラムは、OpenSearchサーバーレスを使ってインデックスを作成する方法を示したものです。

インデックスの検索

以下はOpenSearchサーバーレスを使ってドキュメントを検索する例です。検索のクエリーの箇所はOpenSearchの仕様に合わせて適切にカスタムしましょう。

const AWS = require('aws-sdk');
const opensearchdomain = new AWS.OpenSearchDomain({ endpoint: 'your-opensearch-endpoint' });

async function searchOpenSearch(query) {
  try {
    const searchResult = await opensearchdomain.search({
      query: query,
      size: 10 // 検索結果の最大数
    }).promise();
    return searchResult.hits.hits;
  } catch (error) {
    console.log(error);
    throw new Error('An error occurred while searching OpenSearch');
  }
}

インデックスの作成

以下はOpenSearchサーバーレスを使ってインデックスを作成する例です。Kibanaのコンソールでも同様の事が可能です。

// インポート
const AWS = require('aws-sdk');

// OpenSearchサーバーレスのクライアントを作成
const client = new AWS.OpenSearch({
  apiVersion: '2020-07-01'
});

// インデックスを作成する
const createIndex = async () => {
  const params = {
    DomainName: 'my-domain',
    IndexName: 'my-index',
    IndexSchema: {
      Fields: [
        {
          Name: 'title',
          Type: 'text'
        },
        {
          Name: 'content',
          Type: 'text'
        }
      ]
    }
  };
  const response = await client.createIndex(params).promise();
  console.log(response);
};

createIndex();

上記のサンプルプログラムを実行すると、OpenSearchサーバーレスを使ってインデックスを作成することができます。

まとめ

本記事では、OpenSearchサーバーレスを使う前に知っておきたいデメリットについて紹介しました。OpenSearchを使う際には、事前に要件フィットするかどうかを検討の上使用しましょう。

サーバーレス開発低コストなAWS開発内製化はお気軽にお問い合わせください。