엘라스틱 키워드 필드의 ignore_above

로그스태시를 이용한 데이터 연동 시 문자열 데이터는 형태소 단위로 인덱싱하는 text 타입과 집계 정렬 목적으로 인덱싱을 하지 않는 keyword 타입, 2개의 필드에 저장된다.

이때 keyword 타입 필드는 ignore_above(기본값은 256)보다 길이가 긴 데이터를 저장하지 않는다고 한다. 실제 text와 keyword 필드를 비교해보니 저장 결과가 다른 상황 발생.

text_vs_keyword

­

ignore_above 수정.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PUT iislog-test
{
  "mappings": {
    "properties": {
      "agent": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 2560
          }
        }
      }
    }
  }
}

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
{
  “iislog-test": {
    "aliases": {},
    "mappings": {
      "properties": {
        "agent": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 2560
            }
          }
        }
      }
    },
    "settings": {
      "index": {
        "routing": {
          "allocation": {
            "include": {
              "_tier_preference": "data_content"
            }
          }
        },
        "number_of_shards": "1",
        "provided_name": "testttttt",
        "creation_date": "1689851100816",
        "number_of_replicas": "1",
        "uuid": "zSoylCrrRJ2OoAo4cNiwdQ",
        "version": {
          "created": "8040199"
        }
      }
    }
  }
}

재인덱싱 후 다시 비교해봤다. 필드 유실 없음.

text_vs_keyword2

­

agent 길이를 재보니 ignore_above 수정 전 유실된 데이터 개수와 256보다 길이가 긴 데이터 개수가 같다.

agent_len

agent_len2

 ­

이거 다 keyword 필드에 저장 안 되고 있었는데 여태 몰랐네(..)


Popit은 페이스북 댓글만 사용하고 있습니다. 페이스북 로그인 후 글을 보시면 댓글이 나타납니다.