반응형

Elasticsearch Rest API 형태로 데이터를 조회하기 위해 쿼리를 던지는데, 기존 몽고 DB 필드가 모두 string 형태라 elasticsearch로 넘어오면서 text field로 인식되면서 range를 통해 조건 검색이 안되는 모습을 보였다.

 

해당 필드를 검색되도록 변경하기 위해 mapping 쿼리를 처리해보았는데, 아래처럼 에러가 발생했다.

>PUT http://118.37.186.231:9200/egoviot.usercollection

{
  "mappings": {
    "egoviot.usercollection": {
      "properties": {
        "accessDate": {
          "type":   "date",
          "format": "yyyy-MM-dd"
        }
      }
    }
  }
}

"type": "resource_already_exists_exception"

"reason": "index [egoviot.usercollection/J42yGfwSSOWqNj3bLk5W_g] already exists",

 

결론은 존재하는 index가 이미 존재해서 변경이 불가하다였다.

 

특정 필드 데이터값을 변경하고, 아래와 같이 reindex를 처리하였다.

>POST http://주소값/_reindex

{
	"source": {     
		"index": "egoviot.usercollection"
	},   
	"dest": {     
		"index": "egoviot.usercollection2"
	}
}

 

이후 변경된 인덱스를 통해 조회하면 정상적으로 조회되는 모습을 볼 수 있다.

>POST http://주소값/egoviot.usercollection2/_search

{
  "query": {
    "range": {
      "accessDate": {
        "gte": "2021-03-07",
        "lte": "2021-03-20"
      }
    }
  }
}

 조회가 된다!

반응형