본문 바로가기

데이터처리/elasticSearch

ElasticSearch - 텍스트 정렬

엘라스틱 서치에서 Text 필드를 정렬 하려고 하면

 

Set fielddata=true on ' ' in order to load fielddata in memory by uninverting the inverted index. 

와 같은 에러가 발생을 한다.

 

대부분의 필드 들은 doc_values 를 인덱스 로 사용하지만,

text 필드는 doc_values 를 지원하지 않고 fielddata라는 인 메모리 구조의 쿼리 타임을 사용한다고 한다.

이 field data는 디스크의 세그먼트의 역 색인을 읽어 결과를 JVM 힙 메모리에 저장을 하는데

 

이 비용이 굉장히 커서 기본적으로 false 로 되어있다.

 

따라서 text 필드로는 정렬을 하기 힘든데,

 

이 부분을 해결하기 위해선

 

Multifield 를 사용 하면 된다.

 

 "type": "text",
          "fields": {
            "keyword": { 
              "type": "keyword"
            }
          }


 

맵핑 타입을 보면 텍스트는 이중으로 Keyword 타입을 가지고 있는데,

해당 키워드는 정렬이 가능한 데이터 타입이다.

따라서 정렬을 할땐 Text 필드가 가지고 있는 Keyword 타입으로 정렬을 시키면 된다.