엘라스틱서치2019. 2. 26. 11:09

- Elasticsearch에서 제공하는 Type이 deprecated 되었습니다. 그것도 모르고 여태 써왔다니!!

  보통 RDB의 Table과 매칭시켜서 설명을 많이 했는데 deprecated된 김에 자세히 좀 들여다보았습니다.



6.0 이전까지는 하나의 Index에 복수의 Type을 지정해서 사용하는 것이 가능했습니다. 

마치 RDB의 Table처럼. 그리고 그 안에는 또 Document들이 저장되었습니다.


하지만 엄격히 말하면 Elasticsearch의 Type은 RDB의 Table과는 다릅니다.

Table의 경우 A라는 Table에 있는 name과 B라는 Table에 있는 name은 독립적이고 서로에게 아무런 

영향도 끼치지 않지만 Type의 경우엔 그렇지 않습니다.


A라는 Type의 name Field와 B라는 Type의 name Field는 내부적으로는 같은 루씬 Field를 사용합니다.

즉 두 Type의 name Field 모두 동일한 루씬 Field에 저장되며 두 Type 모두에서 동일한 mapping을 가집니다.

따라서 다른 Type의 동일한 Field는 서로 관련이 있게 되고, 이것이 내부적으로 몇 가지 문제를

야기할 가능성이 있다고 합니다.


그래서 6.0에서 deprecated되고 7.0부터는 아예 삭제가 되어 Type과 관련된 기능은 사용할 수 없게 됩니다.


중요한 것은 instead of, 즉 대안이 없습니다. 그냥 사용하면 안 됩니다.

7.0부터는 모든 Index는 단 하나의 Type(_doc)만을 가지게 됩니다.


따라서 Type으로 나누던 데이터 저장 방법을 Index로 나누는 걸로 변경해야 합니다.


혹시 더 좋은 방법 있으면 공유 좀...


- 관련 레퍼런스

https://www.elastic.co/guide/en/elasticsearch/reference/master/removal-of-types.html


- deprecated list

https://artifacts.elastic.co/javadoc/org/elasticsearch/client/elasticsearch-rest-high-level-client/7.0.0-alpha2/deprecated-list.html

Posted by 홍규홍규