ETC/Elasticsearch

[elasticsearch] 색인 -1

seokhyun2 2025. 1. 19. 18:53

0. 개요

elasticsearch라는 검색엔진을 알아보고 있습니다.

검색엔진에서 검색을 하려면 데이터를 일단 적재해야겠죠?

elasticsearch에 데이터를 적재하는 작업을 색인이라고 합니다.

오늘은 색인에 대해서 예시를 들어가면서 알아보도록 하겠습니다.

elasticsearch에 연결해서 작업하는 방식은 여러가지가 있는데, 제일 간단한 rest API 호출 방식을 기준으로 알아보도록 하겠습니다.

1. elasticsearch 실행

elasticsearch는 우선 간단하게 아래 명령어로 docker를 활용하여 실습할 수 있도록 구성해보도록 하겠습니다.

docker run -it -e xpack.security.enabled=false -e discovery.type=single-node -p 9200:9200 --name es docker.elastic.co/elasticsearch/elasticsearch:8.17.0

여기서 xpack.security.enabled=false는 security에 관련된 모든 옵션을 사용하지 않는 것입니다.security 관련된 옵션이 현재 default로 켜지기 때문에, 실습을 위해서는 끄고 사용해보도록 하겠습니다.

그리고 discovery.type=single-node는 elasticsearch를 하나의 노드로 운영하겠다는 옵션입니다. 

2. 인덱스(Index) 생성

DB에서는 테이블에 해당하는 인덱스를 먼저 생성해보겠습니다.

인덱스를 생성하는 API는 PUT API를 호출하면 됩니다.

생성 시에 설정을 넣어주면 되는데, 아래의 명령어 정도로 간단하게 생성해보도록 하겠습니다.

refresh_interval은 인덱스가 refresh 되는 주기에 대한 설정입니다. DB에서는 데이터를 insert 할 때 commit을 호출해주는 것과 비슷하게 elasticsearch는 refresh를 호출해주어야 하는데, refresh_interval을 설정해두면 주기적으로 자동으로 refresh를 하여 따로 호출해주지 않아도 됩니다. mappings를 추가하여 property를 설정해주었습니다.

curl --location --request PUT 'http://localhost:9200/user' \
--header 'Content-Type: application/json' \
--data '{
    "settings": {
        "refresh_interval": "1s"
    },
    "mappings": {
        "properties": {
            "id": {
                "type": "long"
            },
            "name": {
                "type": "text"
            }
        }
    }
}'

https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html

 

Create index API | Elasticsearch Guide [8.17] | Elastic

You do not have to explicitly specify index section inside the settings section.

www.elastic.co

더 자세한 설정은 위의 elasticsearch 공식 문서에서 확인하시면 됩니다.

참고로 잘 생성되었는지 확인해보고 싶으시면 아래와 같이 API를 호출해보시면 됩니다.

curl --location 'http://localhost:9200/user'

3. 데이터 색인

이제 아래와 같이 API를 호출하여 데이터를 한번 넣어보도록 하겠습니다.

curl --location --request PUT 'http://localhost:9200/user/_doc/1' \
--header 'Content-Type: application/json' \
--data '{
    "id": 1,
    "name": "john"
}'

PUT api를 호출하여 데이터를 색인하였습니다.

elasticsearch에 이제 데이터가 들어간 것인데요.

아래의 공식 홈페이지를 참고하면, PUT 뿐만 아니라 POST를 활용할 수도 있습니다.

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html

 

Index API | Elasticsearch Guide [8.17] | Elastic

The external_gte version type is meant for special use cases and should be used with care. If used incorrectly, it can result in loss of data. There is another option, force, which is deprecated because it can cause primary and replica shards to diverge.

www.elastic.co

 

참고로 색인한 데이터는 아래의 문서를 조회하는 API를 호출해서 문서를 조회해 볼 수 있습니다.

curl --location 'http://localhost:9200/user/_doc/1'

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html

 

Get API | Elasticsearch Guide [8.17] | Elastic

Retrieves the specified JSON document from an index. resp = client.get( index="my-index-000001", id="0", ) print(resp) response = client.get( index: 'my-index-000001', id: 0 ) puts response const response = await client.get({ index: "my-index-000001", id:

www.elastic.co

4. 마무리

오늘은 간단하게 어떻게 elasticsearch에 색인을 할 수 있는지 알아보았습니다.

rest API 호출 방식으로 쉽게 elasitcsearch를 제어할 수 있는데요.

색인을 한번에 많이 하는 경우에 대한 bulk indexing API도 제공하고 있으니, 추가로 확인해보시면 좋습니다.

다음에는 색인에 대해서 좀 더 상세한 내용을 다뤄보도록 하겠습니다.

 

'ETC > Elasticsearch' 카테고리의 다른 글

[elasticsearch] 클러스터  (0) 2024.11.10
[elasticsearch] 데이터 저장  (1) 2024.10.27
[elasticsearch] why elasticsearch?  (0) 2024.10.13