본문 바로가기

Elasticsearch

Elasticsearch 결과에 "_ignored" 가 나오는 이유

반응형

 

es 에서 검색 결과를 보다가 발견한 "_ignored" 필드 !

 

        "_ignored": [
          "description.keyword"  //  ?
        ],

 

이게 뭘까 query 날릴 때 분명 description 관련한 것은 아무것도 없는데 왜 _ignored 가 뜨며 description.keyword 가 왜 ignored 되었는지? 

 

 

Es 결과

{
  "took": 9,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 5,
      "relation": "eq"
    },
    "max_score": 89.01466,
    "hits": [
      {
        "_index": "test_index",
        "_id": "123",
        "_score": 24.17268,
        "_ignored": [
          "description.keyword"  //  ?
        ],
        "_source": {
          "name": "오늘은화요일",
          "idx": 123
        }
      },

 

 

 

해당 Index 의 속성에서 살펴보니 기본적으로 Text 의 경우 es 가 keyword 값을 type no.2 느낌으로 자동으로 넣어주는데 바로 저 ignore_above: 256 이 원인이었다. type: text 는 부분 일치, 형태소 분석 등 여러 검색이 가능한 반면  keyword 는 부분 일치가 아닌 완전한 일치를 가리킨다. 글자 256자 를 초과하면 해당 속성의 키워드 검색을 무시한다는 뜻이었다 ! 

 

 

"description": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },

 

그럼 데이터가 256자 초과해서 엄~청 길게되면 검색이 안되는 건가!? 했는데 생각해보니 그건 text 검색으로 충분히 가능하고 키워드 (완전한 일치) 검색은 256 자 초과하는 스트링 값을 검색할 일은 보통은 없을 것 같아서 이런 설정이 있나 보다 하고 이해가 되었다. 

 

 

 

반응형