Elasticsearch document 생성 과정에서의 실수

..·2024년 6월 20일
0

Elasticsearch

목록 보기
5/7

SpringBoot에서 Elasticsearch를 이용하여 새로운 document를 생성하고 검색하는 코드를 작성했는데, 이를 확인하는 과정에서 오류가 발생해서 Kibana의 DevTool을 이용하여 대략적인 구조를 확인하며 학습했다. 그리고 이 과정에서 내가 어떤 실수를 했는지 확인할 수 있었다.

Dev Tools

Kibana의 Management > Dev Tools에서 다음과 같은 REST 명령을 사용할 수 있다.

_search를 이용한 검색

GET item/_search

SpringBoot에서 생성했던 item 인덱스에 존재하는 모든 document가 검색되는 것을 확인할 수 있었다.

GET item/_search?q=[필드명]:[검색어]

특정 필드를 이용한 검색은 _search?q=[필드명]:[검색어]의 형식으로 작성해서 실행할 수 있다.

Document 생성(PUT)

PUT item/_doc/[id]

id를 지정하여 새로운 document를 생성한다.

Document 조회(GET)

GET item/_doc/[id]

id를 이용하여 해당 document를 조회한다.

SpringBoot에서 작성한 Document Entity

@Document(indexName = "item")
public class Item {
    @Id
    @org.springframework.data.annotation.Id
    @Field(name = "id", type = FieldType.Keyword)
    private String itemId;

    @Field(name = "name", type = FieldType.Keyword)
    private String name;

    @Field(type = FieldType.Text)
    private String description;

    @Field(type = FieldType.Text)
    private String category;

    @Field(type = FieldType.Integer)
    private int price;
}

이전에 SpringBoot에서 작성한 Document Entity이다. 인덱스의 이름은 item으로 등록했다. Dev Tools를 사용하면서 생성한 Entity에 대한 이해를 도울 수 있었다.


내가 실수한 부분

1. document의 id

document에 대한 이해가 부족한 시점에서 예제를 통해 Entity를 구현하면서 id를 String으로 사용했는데, document를 생성할 때 자동적으로 String 형식의 id가 부여되었다.

그러므로 Dev Tool에서 _doc으로 검색할 때는 랜덤으로 생성된 String id를 사용해야 한다는 것을 알게 되었다. 랜덤 문자열의 id를 가진 document는 조회가 까다로워서 이후에 정수형으로 변경해서 사용해야겠다고 생각했다.

2. 문자열 FieldType 유형

document의 문자열 FieldType은 keywordtext를 사용할 수 있다.
keyword는 입력된 문자열을 하나의 토큰으로 저장하기 때문에 집계하거나 정렬에 사용할 문자열 필드를 사용하고, text는 입력된 문자열을 Term이라는 단위로 나누어서 역색인 구조를 만들기 때문에 검색에 사용할 문자열 필드를 지정할 때 사용한다.
이 부분에 대한 이해가 부족한 상태에서 document Entity를 생성했기 때문에 원하는 검색 결과를 얻을 수 없는 상황이 발생했다.


마무리

document와 index의 구조와 역할에 대해 제대로 알지 못한 상태로 사용하는 실수를 했다.
내가 생각하는 문자열 검색을 하기 위해서는 형태소 분석이 필요하기 때문에 FieldType.text의 Field를 사용해야 한다는 점과, 이를 구현하기 위해서는 Nori라는 한글 형태소 분석기를 사용해야 한다는 점을 알게 되었다.
다음에는 생성했던 item document Entity의 구조를 다시 한번 생각하고 설계한 뒤에, Nori를 이용한 한글 검색에 대해 학습해야겠다.

참고

Elasticsearch 데이터 처리
Dev Tools

0개의 댓글