インデックスを作成する際、フィールドのデータ型を text、long、double、または JSON に設定できます。本トピックでは、フィールドのデータ型について説明し、設定例を示します。
データ型の概要
コンソールを使用してインデックスを作成することを推奨します。Simple Log Service (SLS) は、収集時のプレビューデータの最初のエントリに基づいてフィールドインデックスを自動的に生成します。また、カスタムフィールドインデックスを作成することもできます。
-
text、long、double 型:
-
文字列型のフィールドをクエリおよび分析する場合、インデックスの作成時にフィールドのデータ型を text に設定し、そのフィールドの分析機能を有効にする必要があります。
説明text、long、double 型のフィールドでは、それぞれ個別に分析を有効にできます。フィールドに対して [分析を有効にする] をオンにした後にのみ、そのフィールドは、SQL クエリにおいて WHERE 句によるフィルタリング、集計分析 (SELECT/GROUP BY)、および可視化に使用できます。分析が有効になっていない場合、そのフィールドは SQL クエリ分析で抽出できないか、null を返す可能性があります。
コンソールのキー/値インデックス属性設定画面では、各フィールドの行に [分析を有効にする] スイッチがあります。このスイッチは text、long、double の各フィールドタイプで個別に利用でき、フィールドタイプを変更しても消えることはありません。
重要SLS のデフォルトの最大フィールド値長は 2 KB (2,048 バイト) です。この制限を超えるコンテンツは切り捨てられ、インデックス化も分析もされません。これは生ログの収集やレポートには影響しません。
より長いフィールドを完全に分析するために、分析対象の text フィールドの最大長を 16 KB まで増やすことができます。この制限の引き上げが SQL 分析のパフォーマンスに与える影響は文書化されていません。ビジネスシナリオに基づいて影響を評価してください。
-
フィールドのデータ型を long または double に設定した場合にのみ、数値範囲を使用してフィールドの値をクエリできます。フィールドのデータ型を long または double に設定した場合、アスタリスク (*) または疑問符 (?) を使用してフィールドをクエリすることはできません。これらのワイルドカード文字は、あいまい一致を実行するために使用されます。
-
フィールドの値が整数の場合は、フィールドのデータ型を long に設定します。
-
フィールドの値が浮動小数点数の場合は、フィールドのデータ型を double に設定します。そうしないと、フィールドをクエリできません。
-
フィールドのデータ型を long または double に設定しても、フィールドの値が文字列である場合は、そのフィールドをクエリできません。
重要フィールドの値が無効な数値である場合、not key > -1000000 という検索文を使用してフィールドをクエリします。この検索文は、フィールドの値が無効な数値であるログを返します。-1000000 の部分は、ログ内のフィールドの有効な最小数値以下の有効な数値に置き換えてください。
-
-
-
JSON 型:フィールドの値が JSON 型である場合は、インデックスの作成時にフィールドのデータ型を JSON に設定します。
-
JSON オブジェクト内のフィールドのデータ型は、フィールド値に基づいて long、double、または text に設定し、そのフィールドの分析機能を有効にします。分析機能を有効にすると、SLS でそのフィールドのクエリと分析が可能になります。
[JSON フィールドのすべてのテキストフィールドに自動でインデックスを作成] を選択すると、JSON オブジェクト内のテキスト型のすべてのフィールドにインデックスが自動的に作成されます。インデックスが作成されると、インデックス トラフィックが生成されます。
-
部分的に有効な JSON 形式のデータの場合、SLS はデータの有効な部分のみを解析できます。
次の例は、不完全な JSON ログを示しています。SLS は、content.remote_addr、content.request.request_length、content.request.request_method の各フィールドを解析できます。
content: { remote_addr:"192.0.2.0" request: { request_length:"73" request_method:"GE重要-
JSON オブジェクト内のリーフノードに対してインデックスを作成できます。リーフノードを含む子ノードに対してはインデックスを作成できません。
-
値が JSON 配列であるフィールドや、JSON 配列内のフィールドに対してはインデックスを作成できません。
-
フィールドの値がブール型である場合は、インデックス作成時にフィールドのデータ型を text に設定できます。
-
クエリ文は
Search statement|Analytic statementという形式になります。分析文では、フィールド名を二重引用符 ("") で、文字列を一重引用符 ('') で囲む必要があります。
-
-
関連ドキュメント
-
JSON ログのクエリと分析に関するシナリオや FAQ の詳細については、「JSON ログのクエリと分析に関する FAQ」をご参照ください。この FAQ には、インデックスの作成、インデックス化された JSON フィールドのクエリと分析、JSON 関数の使用、JSON 配列の分析に関する情報が含まれています。
-
JSON ログのクエリと分析に関する設定と手順の詳細については、「JSON ログのクエリと分析」をご参照ください。
-
クエリと分析の対象となる JSON ログのデータ量が少ない場合は、JSON のリーフノードに対してインデックスを作成する必要はありません。JSON 関数を使用してログのクエリと分析を行います。特定のユースケースでは、JSON 関数のみを使用してクエリと分析を行うことができます。JSON 関数の使用方法の詳細については、「JSON 関数を使用する状況」をご参照ください。JSON 関数の説明と例の詳細については、「JSON 関数」をご参照ください。
-
-
通常のフィールドとは異なり、日付と時刻の範囲はインデックス化されたフィールドとして設定できません。ログをクエリするには、コンソールの[時間範囲]を使用して手動で時間範囲を指定してください。
操作手順
-
SLS コンソールでインデックスを作成します。詳細については、「インデックスの作成」をご参照ください。
-
インデックス作成時に、フィールドのデータ型を選択します。
text、long、double 型
-
ログの例

-
インデックス設定

-
クエリ文の例
-
リクエストの所要時間が 60 秒を超えるログをクエリするには、次の文を実行します:
request_time > 60 -
リクエストの所要時間が 60 秒以上 200 秒未満のログをクエリするには、次のいずれかの文を実行します:
request_time in [60 200)およびrequest_time >= 60 and request_time < 200。 -
リクエストのステータスコードが 200 のログをクエリするには、次の文を実行します:
status = 200。 -
GET リクエストを記録していないログをクエリするには、次の文を実行します:
not request_method : GET。 -
特定の単語を含み、その単語が cn で始まるログをクエリするには、次の文を実行します:
cn*。 -
クライアント分布の統計を収集するには、次の文を実行します:
* | SELECT ip_to_province(client_ip) as province, count(*) AS pv GROUP BY province ORDER BY pv。
-
JSON 型
-
ログの例
次の図は JSON ログの例です。このログには、class、latency、status、info の各フィールドと、SLS の予約フィールドが含まれています。info フィールドの値は、複数のレイヤーを含む JSON オブジェクトです。

-
インデックス設定

詳細は次のとおりです:
-
IP および data フィールドの値は JSON 配列です。したがって、IP または data フィールドにインデックスを作成できず、これらのフィールドを使用してデータをクエリしたり分析したりすることもできません。
-
region および CreateTime フィールドは JSON 配列内にあります。したがって、region または CreateTime フィールドにインデックスを作成できず、これらのフィールドを使用してデータをクエリしたり分析したりすることもできません。
-
-
クエリ文の例
-
usedTime フィールドの値が 60 秒を超えるログをクエリするには、次の文を実行します:
info.usedTime > 60。 -
success フィールドの値が true であるログをクエリするには、次の文を実行します:
info.success : true。 -
usedTime フィールドの値が 60 秒を超え、かつ projectName フィールドの値が project01 でないログをクエリするには、次の文を実行します:
info.usedTime > 60 not info.param.projectName : project01。 -
プロジェクト情報を取得するために必要な平均所要時間を計算するには、次の文を実行します:
methodName = getProjectInfo | SELECT avg("info.usedTime") AS avg_time。
-
-
インデックスを設定する際は、次のルールに注意してください:
-
全文インデックスまたはキー/値インデックスのいずれかを有効にする必要があります。
-
フィールドレベルのインデックス設定は、全文インデックス内の同名のフィールド設定を上書きします。たとえば、あるフィールドが全文インデックスで全文トークン化検索用に設定されていても、キー/値インデックスでこのフィールドの型とプロパティを個別に設定した場合、キー/値インデックスの設定が優先されます。
-
フィールドタイプが long または double の場合、[大文字/小文字の区別] と [区切り文字] のプロパティは適用されません。
-
インデックス保持期間は短縮のみできます。
-
インデックス設定の変更 (フィールドの追加、型の変更、統計/クエリのスイッチの有効化など) は約 1 分後に有効になりますが、有効になった後に書き込まれた新しいデータにのみ適用されます。履歴データをクエリするには、データを再インデックス化する必要があります。詳細については、「データの再インデックス化」をご参照ください。
-
データの再インデックス化は、過去 30 日以内で、かつ 15 分以上経過したデータのみが対象です。