본문 바로가기

ELK 스택/Elasticsearch

(7)
[Elasticsearh] 실전에서 사용 되는 요청 쿼리 작성 엘라스틱 서치에서 사용되는 다양한 쿼리문에 관한 포스팅입니다:) 모든 문서 검색 GET [INDEX_NAME]/_search { "query": { "match_all" : {} } } 문서의 갯수 검색 GET [INDEX_NAME]/_count { "query": { "match_all" : {} } } 조건 검색 특정 필드에 특정 값을 만족 하는 경우 GET [INDEX_NAME]/_count { "query": { "match": { "[필드명]": "[값]" } } } 특정 필드의 값 조건 + 날짜 지정 범위 GET [INDEX_NAME]/_search { "size": 0, #출력결과 숨길때 "query": { "bool": { "must": [ { "term": { "[필드명]": "[값]" ..
[Elasticsearch] Scroll API 사용하기 (전체 문서 읽어오기) 이번 포스팅은 엘라스틱 서치에서 전체 문서를 가져오기 위해, 스크롤 API를 사용하는 방법에 관한 포스팅입니다. Elasticsearch Scoll API란, Scroll API search 요청이 하나의 페이지를 결과로 리턴하는 동안, scrooll API는 하나의 search 요청에서 많은 수의 결과 리턴을 가능하게 해 준다. 이러한 방법은 전통적인 데이터베이스의 커서를 사용하는 것과 같은 방식이라고 생각할 수 있다. Scrolling은 실시간으로 유저의 요청을 처리하기 위해 의도된 것이 아니라 대량의 데이터를 처리하기 위한 것 (예를 들면, 한 인덱스를 다른 구성으로 된 새로운 인덱스로 리인덱스 해주기 위함) Scrolling을 사용하기 위해, 초기 검색 요청 시 scroll 파라미터를 쿼리문에 명..
[Elastic] Crontab을 활용해 주기적으로 Document 삭제 이번 포스팅은 엘라스틱에 적재되는 수많은 데이터를 주기적으로 삭제하기 위해 crontab을 사용하는 예제입니다. 1. 엘라스틱 Curator - 엘라스틱 자체에 Curator를 활용하여 오래된 인덱스를 지워주는 기능이 존재 - 이번 포스팅은 인덱스를 지우는 것이 아닌 Document를 지워야 하기에 Crontab활용 - 다음 포스팅에 Curator를 활용해 볼 예정 (이때는 인덱스를 날짜별로 적재해야 함) 2. Crontab이란 - 특정 시간에 특정 작업을 해야 할 때 사용. 단순하게 리눅스 작업 스케줄러라고 생각하면 편함 - 엘라스틱 서치의 데이터가 너무 많이 쌓이는 것을 미리 방지하기 위해 2일 전 데이터는 자동으로 삭제될 수 있도록 crontab을 등록해놓을 예정 3. Crontab 설치 및 재시작..
[Elasticsearch] 실전 쿼리 사용법 이번 포스팅은 엘라스틱을 사용하면서 필요한 쿼리 문법 사용에 관한 포스팅입니다. 1. 인덱스는 유지, 안의 document를 모두 삭제하는 쿼리 POST [인덱스이름]/_delete_by_query { "query": { "match_all": {} } } - 위와 같이 하면, 생성한 인덱스와 매핑은 유지되면서, 안에 적재한 데이터가 삭제된다 - 삭제는 주의, 또 주의해야함 >> 아래는 command 버전 명령어 curl -X POST "localhost:9200/[인덱스이름]/_delete_by_query?conflicts=proceed&pretty" -H 'Content-Type: application/json' -d' { "query": { "match_all": {} } }' 2. 인덱스 삭제 D..
[Elasticsearch] Plugin 설치 및 적용 이번 포스팅은 엘라스틱서치 플러그인 사용과 실제 검색 시 적용되는 예제에 관한 포스팅입니다. "이미지 검색에 관한 검색엔진을 만드는 데 사용하는 벡터 검색 플러그인" 1. 적용 할 플러그인 검색 - 이번 벡터 검색에 사용 할 엘라스틱 검색 플러그인 https://github.com/lior-k/fast-elasticsearch-vector-scoring lior-k/fast-elasticsearch-vector-scoring Score documents using embedding-vectors dot-product or cosine-similarity with ES Lucene engine - lior-k/fast-elasticsearch-vector-scoring github.com - embeddi..
[Elasticsearch] python에서 엘라스틱 사용하기 이번 포스팅은 파이썬에서 엘라스틱을 연결해서 데이터를 insert, delete, search 등 다양한 요청을 하는 튜토리얼입니다. 필요한 라이브러리 설치 $ pip install elasticsearch - 파이썬에서 엘라스틱을 연결하기 위해 pip으로 엘라스틱을 설치. 파이썬에서 엘라스틱 연결 from elasticsearch import Elasticsearch es = Elasticsearch('[엘라스틱_서버_IP_주소]:9200') - 엘라스틱이 설치된 서버 주소와 포트를 입력 - 파이썬에서 엘라스틱을 연결한다. 데이터 삽입 # mapping 없이 자동 인덱스 생성 def insertData(): es = Elasticsearch('[엘라스틱_서버_IP_주소]:9200') index="pro..
[Elasticsearch] 기존 맵핑 필드 타입 변경하기 + reindex 이번 포스팅은 엘라스틱 서치 사용 중 존재하는 인덱스의 매핑 필드 타입을 변경하는 튜토리얼 입니다. 1. 문제 발생 및 파악 - 엘라스틱을 사용해 데이터를 적재한 뒤 검색 쿼리 도중 문제 발생 - 사용하려는 쿼리가 데이터의 타입과 맞지 않아 검색 할 수 없다는 내용을 담고있다. - 즉, vector scoring 검색을 사용하는데, vector가 binary형태로 입력이 되어있어야 하는데 현재 text로 맵핑되어있음 2. 해결 방안 - 기본적으로 한번 지정된 데이터 타입은 변경이 불가능하다. - 여기서 제시하는 방법은 다시 데이터를 적재하지 않고, 최대한 쉽게 원하는 타입의 맵핑으로 변경하는 방법 PUT /[새로운_인덱스_이름] { "settings" : { "number_of_shards" : 1 },..