티스토리 뷰

728x90
반응형

Elasticsearch

  • 엘라스틱서치(Elasticsearch)는 아파치 루씬(Apache Lucene)을 기반으로 개발된 오픈소스 분산 검색 엔진이다. 
  • 루씬의 역색인(inverted index) 구조를 활용하여 문서 내 단어들을 빠르게 색인하고 검색할 수 있다.
  • 엘라스틱서치는 검색 엔진 기능 외에도 로그 분석과 실시간 모니터링 등에 사용된다.
  • 특히 Logstash와 Kibana와 함께 사용되어 데이터 수집, 저장, 분석, 시각화를 제공할 수 있다.
  • Elasticsearch Python Client 사용하면 Python 애플리케이션에서 Elasticsearch를 쉽게 통합할 수 있다.

 

1) Elasticsearch 설치

  • Elasticsearch Python Client를 설치하려면 pip를 사용하면 된다.
pip install elasticsearch

 

2) Elasticsearch Client 노드 연결하기

from elasticsearch import Elasticsearch

client = Elasticsearch(
    "http://localhost:9200",  # endpoint
    api_key="api_key",
)
  • api_key는 인증과 권한을 관리하는 방법이다. 보안 설정을 하고 api key를 생성할 수 있다.
  • 초기에는 작성하지 않으면 default 값으로 None이 입력된다.

 

3) Index(인덱스) 생성하기

  • Elasticsearch에서 인덱스는 MySQL 데이터베이스의 테이블과 같다.
client.indices.create(index="my_index")
  • 삭제도 간단하게 가능하다.
client.indices.delete(index="my_index")

 

4) Documents(문서) 관리하기

  • MySQL의 테이블에서는 각 행(row)이 개별적인 레코드로 관리되지만, Elasticsearch에서는 문서들이 통으로 역색인되어 관리다.

(1) 문서 생성하기

client.index(
    index="my_index",
    id="my_document_id",
    document={
        "field1": "value1",
        "field2": "value2",
    }
)
  • Elasticsearch의 문서 ID는 MySQL에서 각 레코드(행)을 구분하는 기본키(Primary Key)에 해당된다.
  • Elasticsearch의 문서는 여러 개의 field-value 쌍으로 구성되며, 이는 MySQL의 테이블 구조에서 열(column)과 값(value)에 대응된다.

 

(2) 문서 조회하기

client.get(index="my_index", id="my_document_id")
  • 어떤 인덱스의 어떤 id를 가진 문서를 조회할지 입력하면 문서를 가져온다.

 

(3) 문서 검색하기

client.search(index="my_index", query={
    "match": {
        "field1": "value1"
    }
})
  • search는 여러개의 문서들을 검색한다.
  • "my_index" 인덱스에 쿼리를 날려 문서를 검색할 수 있다.
  • "match"는 쿼리 종류를 의미한다.
    • match: 풀 텍스트에서 해당 단어를 검색한다. (OR 검색)
    • match_all: 모든 문서를 검색한다.
  • 여기서는 field1에 value1을 포함하는 문서들이 검색된다.

 

(4) 문서 수정하기

client.update(index="my_index", id="my_document_id", doc={
    "field1": "new value1",
    "new_field": "new value2",
})
  • "my_index" 인덱스의 문서 ID가 "my_document_id"인 문서를 찾아 doc의 내용으로 수정한다.
  • "field1": "new value1" 코드는 "field1" 필드의 값을 "new value1"로 변경하는 것을 의미한다.
  • "new_field": "new value2" 코드는 "new_field"라는 새로운 필드를 추가하고 그 값을 "new value2"로 설정하는 것을 의미한다.

 

(5) 문서 삭제하기

client.delete(index="my_index", id="my_document_id")
  • 문서 ID를 통해 문서를 삭제한다.

 

 

참고문헌

728x90
반응형
댓글