Help Center/ Log Tank Service/ API Reference/ APIs/ Log Stream Management/ Creating an Index for a Specified Log Stream
Updated on 2024-12-20 GMT+08:00

Creating an Index for a Specified Log Stream

Function

This API is used to create an index for a specified log stream.

Calling Method

For details, see Calling APIs.

URI

POST /v1.0/{project_id}/groups/{group_id}/stream/{stream_id}/index/config

Table 1 Path Parameters

Parameter

Mandatory

Type

Description

project_id

Yes

String

Project ID. For details about how to obtain a project ID, see Obtaining the Project ID, Account ID, Log Group ID, and Log Stream ID.

Minimum: 36

Maximum: 36

group_id

Yes

String

Log group ID. For details about how to obtain a log group ID, see Obtaining the Project ID, Account ID, Log Group ID, and Log Stream ID.

Minimum: 36

Maximum: 36

stream_id

Yes

String

Log stream ID. For details about how to obtain a log stream ID, see Obtaining the Project ID, Account ID, Log Group ID, and Log Stream ID.

Minimum: 36

Maximum: 36

Request Parameters

Table 2 Request header parameters

Parameter

Mandatory

Type

Description

X-Auth-Token

Yes

String

User token obtained from IAM. For details about how to obtain a user token, see Obtaining a User Token.

Content-Type

Yes

String

Set this parameter to application/json;charset=UTF-8.

Table 3 Request body parameters

Parameter

Mandatory

Type

Description

logStreamId

Yes

String

Log stream ID.

fullTextIndex

Yes

LTSFullTextIndexInfo object

Whole text indexing configuration.

fields

No

Array of LTSFieldsInfo objects

Field indexing configuration.

Table 4 LTSFullTextIndexInfo

Parameter

Mandatory

Type

Description

enable

Yes

Boolean

Whether to enable whole text indexing.

caseSensitive

Yes

Boolean

Whether the value of the field is case-sensitive.

includeChinese

Yes

Boolean

Whether Chinese characters are contained.

tokenizer

Yes

String

Custom delimiter.

Minimum: 0

Maximum: 128

ascii

No

Array of strings

Special delimiter.

Minimum: 1

Maximum: 3

Table 5 LTSFieldsInfo

Parameter

Mandatory

Type

Description

fieldType

Yes

String

Field type.

fieldName

Yes

String

Field name.

Minimum: 1

Maximum: 256

caseSensitive

No

Boolean

Whether the value of the field is case-sensitive.

Default: false

includeChinese

No

Boolean

Whether Chinese characters are contained.

Default: false

tokenizer

Yes

String

Delimiter.

Minimum: 0

Maximum: 128

quickAnalysis

No

Boolean

Whether to enable quick analysis.

Default: false

ascii

No

Array of strings

Special delimiter.

ltsSubFieldsInfoList

No

Array of LTSSubFieldsInfo objects

JSON field information.

Table 6 LTSSubFieldsInfo

Parameter

Mandatory

Type

Description

fieldType

Yes

String

Field type.

fieldName

Yes

String

Field name.

Minimum: 1

Maximum: 256

caseSensitive

No

Boolean

Whether the value of the field is case-sensitive.

Default: false

includeChinese

No

Boolean

Whether Chinese characters are contained.

Default: false

tokenizer

No

String

Delimiter.

Minimum: 0

Maximum: 128

quickAnalysis

No

Boolean

Whether to enable quick analysis.

Default: false

ascii

No

Array of strings

Special delimiter.

Response Parameters

Status code: 200

Table 7 Response body parameters

Parameter

Type

Description

errorCode

String

Error code.

errorMessage

String

Error description.

result

String

Result.

isQueryComplete

Boolean

Whether the query is complete.

Status code: 400

Table 8 Response body parameters

Parameter

Type

Description

errorCode

String

Error code.

Minimum: 8

Maximum: 36

errorMessage

String

Error description.

Minimum: 2

Maximum: 512

Status code: 401

Table 9 Response body parameters

Parameter

Type

Description

errorCode

String

Error code.

Minimum: 8

Maximum: 36

errorMessage

String

Error description.

Minimum: 2

Maximum: 512

Status code: 500

Table 10 Response body parameters

Parameter

Type

Description

errorCode

String

Error code.

Minimum: 8

Maximum: 36

errorMessage

String

Error description.

Minimum: 2

Maximum: 512

Example Requests

Create an index for a specified log stream.

POST https://{endpoint}/v1.0/{project_id}/groups/{group_id}/stream/{stream_id}/index/config

{
  "logStreamId" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "fullTextIndex" : {
    "enable" : true,
    "caseSensitive" : false,
    "includeChinese" : true,
    "tokenizer" : ", '\";=()[]{}@&<>/:\\n\\t\\r"
  },
  "fields" : [ {
    "fieldType" : "long",
    "fieldName" : "fieldName1",
    "caseSensitive" : false,
    "includeChinese" : true,
    "tokenizer" : "",
    "quickAnalysis" : true
  }, {
    "fieldType" : "string",
    "fieldName" : "fieldName2",
    "caseSensitive" : false,
    "includeChinese" : true,
    "tokenizer" : "",
    "quickAnalysis" : true
  } ]
}

Example Responses

Status code: 200

Indexing is added successfully.

{
  "errorCode" : "SVCSTG.ALS.200200",
  "errorMessage" : "add or update indexConfig successfully",
  "isQueryComplete" : true,
  "result" : "493d04ce-5130-4b07-88be-c5ae3b50bccb"
}

Status code: 400

Incorrect request parameter . Modify the parameter based on the response body.

{
  "errorCode" : "SVCSTG.ALS.200201",
  "errorMessage" : "IndexConfigInfo check failed.",
  "isQueryComplete" : true
}

Status code: 401

Authentication failed. Check whether the authentication information has expired.

{
  "error_msg" : "Incorrect IAM authentication information: decrypt token fail",
  "error_code" : "APIGW.0301",
  "request_id" : "b16cc9d789f34cd5196d8df065341788"
}

Status code: 500

The service backend has received the request, but an internal processing error occurs.

{
  "highLightFields" : { },
  "errorCode" : "LTS.0203",
  "errorMessage" : "Internal Server Error",
  "result" : null,
  "encoded_authorization_message" : null,
  "isQueryComplete" : true
}

SDK Sample Code

The SDK sample code is as follows.

Create an index for a specified log stream.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.lts.v2.region.LtsRegion;
import com.huaweicloud.sdk.lts.v2.*;
import com.huaweicloud.sdk.lts.v2.model.*;

import java.util.List;
import java.util.ArrayList;

public class CreateLogStreamIndexSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";

        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);

        LtsClient client = LtsClient.newBuilder()
                .withCredential(auth)
                .withRegion(LtsRegion.valueOf("<YOUR REGION>"))
                .build();
        CreateLogStreamIndexRequest request = new CreateLogStreamIndexRequest();
        request.withGroupId("{group_id}");
        request.withStreamId("{stream_id}");
        LTSIndexConfigInfo body = new LTSIndexConfigInfo();
        List<LTSFieldsInfo> listbodyFields = new ArrayList<>();
        listbodyFields.add(
            new LTSFieldsInfo()
                .withFieldType(LTSFieldsInfo.FieldTypeEnum.fromValue("long"))
                .withFieldName("fieldName1")
                .withCaseSensitive(false)
                .withIncludeChinese(true)
                .withTokenizer("")
                .withQuickAnalysis(true)
        );
        listbodyFields.add(
            new LTSFieldsInfo()
                .withFieldType(LTSFieldsInfo.FieldTypeEnum.fromValue("string"))
                .withFieldName("fieldName2")
                .withCaseSensitive(false)
                .withIncludeChinese(true)
                .withTokenizer("")
                .withQuickAnalysis(true)
        );
        LTSFullTextIndexInfo fullTextIndexbody = new LTSFullTextIndexInfo();
        fullTextIndexbody.withEnable(true)
            .withCaseSensitive(false)
            .withIncludeChinese(true)
            .withTokenizer(", '";=()[]{}@&<>/:\n\t\r");
        body.withLogStreamId("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
        body.withFields(listbodyFields);
        body.withFullTextIndex(fullTextIndexbody);
        request.withBody(body);
        try {
            CreateLogStreamIndexResponse response = client.createLogStreamIndex(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}

Create an index for a specified log stream.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdklts.v2.region.lts_region import LtsRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdklts.v2 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"

    credentials = BasicCredentials(ak, sk, projectId)

    client = LtsClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(LtsRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = CreateLogStreamIndexRequest()
        request.group_id = "{group_id}"
        request.stream_id = "{stream_id}"
        listFieldsbody = [
            LTSFieldsInfo(
                field_type="long",
                field_name="fieldName1",
                case_sensitive=False,
                include_chinese=True,
                tokenizer="",
                quick_analysis=True
            ),
            LTSFieldsInfo(
                field_type="string",
                field_name="fieldName2",
                case_sensitive=False,
                include_chinese=True,
                tokenizer="",
                quick_analysis=True
            )
        ]
        fullTextIndexbody = LTSFullTextIndexInfo(
            enable=True,
            case_sensitive=False,
            include_chinese=True,
            tokenizer=", '";=()[]{}@&<>/:\n\t\r"
        )
        request.body = LTSIndexConfigInfo(
            log_stream_id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            fields=listFieldsbody,
            full_text_index=fullTextIndexbody
        )
        response = client.create_log_stream_index(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

Create an index for a specified log stream.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    lts "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/lts/v2"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/lts/v2/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/lts/v2/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        Build()

    client := lts.NewLtsClient(
        lts.LtsClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.CreateLogStreamIndexRequest{}
	request.GroupId = "{group_id}"
	request.StreamId = "{stream_id}"
	caseSensitiveFields:= false
	includeChineseFields:= true
	quickAnalysisFields:= true
	caseSensitiveFields1:= false
	includeChineseFields1:= true
	quickAnalysisFields1:= true
	var listFieldsbody = []model.LtsFieldsInfo{
        {
            FieldType: model.GetLtsFieldsInfoFieldTypeEnum().LONG,
            FieldName: "fieldName1",
            CaseSensitive: &caseSensitiveFields,
            IncludeChinese: &includeChineseFields,
            Tokenizer: "",
            QuickAnalysis: &quickAnalysisFields,
        },
        {
            FieldType: model.GetLtsFieldsInfoFieldTypeEnum().STRING,
            FieldName: "fieldName2",
            CaseSensitive: &caseSensitiveFields1,
            IncludeChinese: &includeChineseFields1,
            Tokenizer: "",
            QuickAnalysis: &quickAnalysisFields1,
        },
    }
	fullTextIndexbody := &model.LtsFullTextIndexInfo{
		Enable: true,
		CaseSensitive: false,
		IncludeChinese: true,
		Tokenizer: ", '";=()[]{}@&<>/:\n\t\r",
	}
	request.Body = &model.LtsIndexConfigInfo{
		LogStreamId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
		Fields: &listFieldsbody,
		FullTextIndex: fullTextIndexbody,
	}
	response, err := client.CreateLogStreamIndex(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

For SDK sample code of more programming languages, see the Sample Code tab in API Explorer. SDK sample code can be automatically generated.

Status Codes

Status Code

Description

200

Indexing is added successfully.

400

Incorrect request parameter . Modify the parameter based on the response body.

401

Authentication failed. Check whether the authentication information has expired.

500

The service backend has received the request, but an internal processing error occurs.

Error Codes

See Error Codes.