> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Elasticsearch

> ElasticsearchからOneSignalにカスタムイベントを同期して、ユーザー行動に基づいた自動化されたJourneyとパーソナライズされたメッセージングキャンペーンをトリガーします。

export const PLATFORM_0 = "Elasticsearch"

export const DATA_TYPE_0 = "event document fields"

export const COLUMN_HEADER_0 = "Elasticsearch Field"

export const PROPERTIES_DESCRIPTION_0 = "Nested object or flattened fields"

## 概要

OneSignal + Elasticsearch統合により、ElasticsearchクラスターからOneSignalへのカスタムイベントの自動同期が可能になります。これにより、検索および分析エンジンに保存されたユーザー行動データに基づいて、自動化されたJourneyとパーソナライズされたメッセージングキャンペーンをトリガーできます。

***

## 要件

* アウトバウンドメッセージイベント用の[Event Streams](/docs/ja/event-streams)へのアクセス（プランの制限と超過料金が適用されます）
* インバウンドイベント同期用の[Custom Events](/docs/ja/custom-events)へのアクセス（プランの制限と超過料金が適用されます）
* [更新されたアカウントプラン](https://onesignal.com/pricing)（無料アプリでは利用できません）

### Elasticsearch

* **Elasticsearchクラスター**（バージョン7.0以上を推奨）
* **認証資格情報**（APIキー、ユーザー名/パスワード、または証明書）
* 適切なドキュメント構造を持つ行動データを含む**イベントインデックス**
* OneSignalからElasticsearchクラスターへの**ネットワークアクセス**

***

## セットアップ

<Steps>
  <Step title="Elasticsearchアクセスを構成する">
    OneSignalがElasticsearchクラスターに接続できることを確認します：

    **Elasticsearch Cloudの場合：**

    * Elasticsearch Cloudコンソールの**Security**に移動します
    * イベントインデックスの読み取り権限を持つAPIキーを作成します
    * **Cloud ID**と**API Key**をメモします

    **セルフホストElasticsearchの場合：**

    * 認証を構成します（基本認証またはAPIキー）
    * OneSignalのIPアドレスからクラスターにアクセスできることを確認します
    * クラスターの**エンドポイントURL**と**資格情報**をメモします
  </Step>

  <Step title="専用ユーザーを作成する（推奨）">
    イベントインデックスへの読み取り専用アクセスを持つOneSignal専用ユーザーを作成します：

    ```json theme={null}
    PUT _security/user/onesignal_reader
    {
      "password": "strong_password",
      "roles": ["onesignal_events_reader"]
    }

    PUT _security/role/onesignal_events_reader
    {
      "indices": [
        {
          "names": ["events-*", "user_events"],
          "privileges": ["read", "view_index_metadata"]
        }
      ]
    }
    ```
  </Step>

  <Step title="OneSignalで統合を追加する">
    OneSignalで、**Data > Integrations**に移動し、**Add Integration**をクリックします。

    **Elasticsearch**を選択し、次を提供します：

    * **Cluster URL**：Elasticsearchエンドポイント（例：`https://your-cluster.es.amazonaws.com`）
    * **Authentication Method**：APIキー、基本認証、または証明書
    * **Username/Password**または**API Key**：認証資格情報
    * **Cloud ID**（Elasticsearch Cloudを使用している場合）：デプロイメントのCloud ID
  </Step>

  <Step title="イベントデータソースを構成する">
    イベントデータを含むElasticsearchインデックスを指定します：

    * **Index Pattern**：イベントを含むインデックスまたはインデックスパターン（例：`events-*`）
    * **Event Query**：イベントドキュメントをフィルタリングするためのオプションのElasticsearch Query DSL
    * **Time Field**：時間ベースのフィルタリングのためのタイムスタンプフィールド（例：`@timestamp`）

    イベントドキュメントには次のフィールドが含まれている必要があります：

    * イベント名/タイプ（String）
    * ユーザー識別子（String）
    * イベントタイムスタンプ（Date）
    * 追加のイベントプロパティ（Object）
  </Step>

  <Step title="接続をテストする">
    **Test Connection**をクリックして、OneSignalがElasticsearchクラスターにアクセスし、イベントデータを読み取れることを確認します。
  </Step>
</Steps>

***

### イベントデータマッピング

{PLATFORM_0} {DATA_TYPE_0}をOneSignalのカスタムイベント形式にマッピングします：

| OneSignalフィールド | {COLUMN_HEADER_0} | 説明                         | 必須  |
| -------------- | ----------------- | -------------------------- | --- |
| `name`         | `event_name`      | イベント識別子                    | はい  |
| `external_id`  | `user_id`         | ユーザー識別子                    | はい  |
| `timestamp`    | `event_timestamp` | イベントが発生した時刻                | いいえ |
| `properties`   | `event_data`      | {PROPERTIES_DESCRIPTION_0} | いいえ |

***

## 高度な構成

### Query DSLフィルタリング

OneSignalに同期する前に、Elasticsearch Query DSLを使用してイベントデータをフィルタリングおよび変換します：

```json theme={null}
{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "@timestamp": {
              "gte": "now-7d"
            }
          }
        },
        {
          "terms": {
            "event_name": ["purchase", "signup", "upgrade"]
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "test_user": true
          }
        }
      ]
    }
  },
  "_source": [
    "event_name",
    "user_id",
    "@timestamp",
    "properties.*"
  ]
}
```

### インデックスパターン構成

複数のインデックス全体を効率的にクエリします：

* **時間ベースのインデックス**：時間分割データには`events-2024-*`のようなパターンを使用します
* **ルーティング**：ユーザーベースのクエリに対して一貫したルーティングを確保します
* **エイリアス**：簡素化された管理のためにインデックスエイリアスを使用します

### パフォーマンスの最適化

大量のイベントボリュームに対してクエリを最適化します：

* **フィールドフィルタリング**：必要なフィールドのみを取得するために`_source`フィルタリングを使用します
* **Scroll API**：大きな結果セットの場合、OneSignalはスクロールページネーションを使用します
* **日付計算**：効率的な時間ベースのフィルタリングにはElasticsearch日付計算を使用します

<Warning>
  Elasticsearchクラスターが、クラスターを使用している他のアプリケーションに影響を与えることなく、OneSignalのクエリを処理するのに十分なリソースを持っていることを確認してください。
</Warning>

***

## FAQ

### OneSignalはElasticsearchからどのくらいの頻度でイベントを同期しますか？

OneSignalは、構成されたスケジュールに基づいてイベントデータを同期し、最小間隔は15分です。

### 複数のElasticsearchインデックスからイベントを同期できますか？

はい。インデックスパターン（例：`events-*`）を使用して複数のインデックス全体をクエリするか、異なるインデックスグループに対して複数の統合を作成できます。

### Elasticsearchクラスターが一時的に利用できない場合はどうなりますか？

OneSignalは指数バックオフで接続を再試行します。クラスターが再びアクセス可能になると、イベント同期は自動的に再開されます。
