• Keyword
    • 일정한 형식으로 고정된 문자열 데이터를 색인할 때 사용
    • keyword타입의 field는..
      • aggregation, sorting, filtering에 사용된다.
      • 분리된 문자열로는 검색할 수 없다. 
  • Text
    • 사이즈가 큰 문자열을 저장할 때 사용 
    • 'Analyzer'를 통해 문자열이 분리된 토큰으로 저장되기 때문에 문자열 내 단어들로 검색할 수 있다. 
    • 전문 검색이 필요할 경우에 사용하는 것이 좋음 
    • sorting, aggregation에 사용은 가능하나 성능 문제로 사용시 주의가 필요하다. 
      • Text & Keyword
        • 타입은 text이지만 aggregation 이나 sorting을 해야하는 경우에는 아래와 같이 사용한다. 
        • city의 타입은 text이지만 city.raw 필드의 type은 키워드로 준다. 
PUT my_index
{
  "mappings": {
    "properties": {
      "city": {
        "type": "text",
        "fields": {
          "raw": { 
            "type":  "keyword"
          }
        }
      }
    }
  }
}

PUT my_index/_doc/1
{
  "city": "New York"
}

PUT my_index/_doc/2
{
  "city": "York"
}

GET my_index/_search
{
  "query": {
    "match": {
      "city": "york" 
    }
  },
  "sort": {
    "city.raw": "asc" 
  },
  "aggs": {
    "Cities": {
      "terms": {
        "field": "city.raw" 
      }
    }
  }
}

 

(참고 : https://www.elastic.co/guide/en/elasticsearch/reference/6.5)

 

+ Recent posts