데이터베이스/Elasticsearch
Elasticsearch에서 reindex를 이용해서 매핑정보 변경하기
Elasticsearch에서 index를 구성하다보면 매핑정보를 추가하거나 수정하고 싶을때가 있다. 내가 아는 내에서는 한번 생성된 index의 매핑정보를 변경하는건 어렵다. 그래서 reindex를 통해 index의 매핑정보를 변경해줘야한다. 우선 wedul_mapping이라는 인덱스가 있다고 해보자. 매핑 정보는 다음과 같다. PUT wedul_mapping { "mappings": { "_doc": { "dynamic": "false", "properties": { "id": { "type": "integer" }, "name": { "type": "text", "fields": { "keyword": { "type": "keyword" } } } } } } } 이때 name에서 keyword필드를 ..
Elasticsearch에서 synonyms.txt로 동의어 필터 만들어서 사용하기
elasticsearch에서 검색기능을 넣다가 2080이라는 키워드를 검색 했을때와 이공팔공이라는 검색어를 입력했을 때 두개 모두 동일한 데이터를 출력하도록 지정하고 싶었다. 그래서 synonyms 필터를 만들기로 했다. 우선 synonyms 필터를 만들어서 사용하기 위해서는 동의어에 대한 정리가 되어있는 사전을 만들어야 한다. 사전 생성 방법은 다음과 같고 아래 링크를 참조해서 간단하게 사전을 만들었다. https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html 파일명은 synonyms.txt이고 내용은 다음과 같다. synonyms.txt 노레바,noreva,노래바 airpods,에어팟..
elasticsearch 7.0 docker 설치 후 변경사항 확인
엘라스틱서치 7.0이 출시했다. 엘라스틱서치 7.0에는 kibana UI변경과 multi mapping type 제거 등의 이슈가 있다. 우선 달라진점을 확인하기 위해 docker에 설치해보자. 설치 elasticsearch docker run --name elastic7.0 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.0.0 kibana docker run -d --rm --link elastic7.0:elastic-url -e "ELASTICSEARCH_HOSTS=http://elastic-url:9200" -p 5601:5601 --name kibana7...
docker logstash 설치 및 log 파일 elasticsearch에 기록
ELK에서 logstash를 제외하고는 모두 경험해봤다.이제 logstash를 사용해서 log파일을 elasticsearch에 기록해보자. 설치elasticseach도 kibana도 pc에 직접 설치하고 싶지 않아서 docker에 설치해서 사용했다. logstash도 docker에 설치해서 사용해보자. 물론 logstash를 사용하기전에 elasticseach와 kibana가 설치되어 있어야한다. 설치법은 저번 게시물에 올려놨다. logstash를 이름을 지정해서 background에서 동작하도록 실행시킨다.1docker run --name logstash -d docker.elastic.co/logstash/logstash:6.4.0cs 설정파일logstash를 설치하면 내부에 다음과 같은 설정파일이 ..
Elasticsearch에서 refresh 정리
Elasticsearch에서 document를 업데이트하고 바로 해당 정보를 조회하려고 했다.하지만 조회가 되지 않았다. 분명이 업데이트가 종료된 것을 확인 했는데 왜 그런지 의문이 들었다. 그래서 찾아봤는데 document가 업데이트가 되고나서 인덱스에서 실제로 조회가 될 수있는 상태가 되기위해서는 일정시간이 필요한 것 같다.자세히는 모르지만 다시 인덱싱을 걸기 때문에 그러는건 아닌가 생각된다. 그래서 이런경우에 업데이트가 종료 되었다고 알리는 시간을 검색이 가능하게 변경된 시간까지 포함해서 알려주도록 하는 옵션이 존재한다. 그렇게 되면 업데이트가 되고 검색이 가능한줄 알고 프로그램을 작성하다가 버그가 발생하는 비율을 줄일 수 있다. 일반적인 bulkInsert나 update, create같은 명령에는..
Elasticsearch에서 search_after 기능 사용하여 조회하기
elasticsearch에서 search_after를 이용하여 데이터를 조회하는 방법을 정리해보자.우선 사용할 인덱스를 생성하자. 12345678910111213141516171819202122PUT wedul{ "mappings": { "cjung": { "properties": { "id": { "type": "keyword" }, "name": { "type": "text", "analyzer": "nori", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } }}Colored by Color Scriptercs 생성된 인덱스에 데이터 몇개만 삽입하여보자.123456789101112131415POST wedul/cju..
Elasticsearch에서 Full text queries와 Term level queries 정리
Elasticsearch를 사용하다보면 term과 match 관련된 쿼리에 대해 헷갈리는 경우가 많다. Document에 있는 내용을 가져와서 정리해보자. Full text queriesThe high-level full text queries are usually used for running full text queries on full text fields like the body of an email. They understand how the field being queried is analyzed and will apply each field’sanalyzer (or search_analyzer) to the query string before executing. match queryThe s..
Elasticsearch query string 조회시 parse exception 에러 처리
elasticsearch에서 query_string로 데이터 조회시에 쿼리문으로 ) 특수문자가 포함하여 조회했다. 하지만 다음과 같이 문제가 발생했다. 1234567891011{ "error": { "root_cause": [ { "type": "parse_exception", "reason": "parse_exception: Encountered \" \")\" \") \"\" at line 1, column 11.\nWas expecting one of:\n \n ...\n ...\n ...\n \"+\" ...\n \"-\" ...\n ...\n \"(\" ...\n \"*\" ...\n \"^\" ...\n ...\n ...\n ...\n ...\n ...\n ...\n \"[\" ...\n \"..
Elasticsearch에서 Paging시 max_result_window 초과시 조회가 안되는 이슈
엘라스틱 서치에서 데이터를 paging 하여 조회할때 from과 size를 사용한다. from은 시작 지점을 이야기하고 size는 그 시작 지점으로 부터 몇 개의 데이터를 보여주어야 하는 건지 설정할 때 사용 되는 값이다. 그래서 계산 방법은 다음과 같다.from : (page - 1) * size size : size 그럼 만약 3개씩 보여주는 페이지에서 2번째 페이지를 보여주기 위해서는 from은 3, size는 3으로 설정하면 된다.123456789GET wedul/_search{ "from": 3, "size": 3, "query": { "match_all": {} }} cs 그럼 만약 wedul 페이지를 접근하다가 다음과 같이 Document의 숫자가 10000을 넘어가게 되면 어떻게 될까? 쿼..
Elasticsearch 6.4 기본 한글 형태소 분석기 노리 (nori) 설명 및 사전 추가하기
엘라스틱 서치를 쓰면서 기존에 형태소 분석기를 아리랑, 은전한닢, open korea등을 사용했었다. 근데 이번에 6.4버전이 출시 되면서 Elasticsearch에서 기본으로 제공하는 한글 형태소 분석기가 나왔다. 이름은 nori(노리)이다. 노리는 놀이라는 뜻에서 가져왔으며 mecab-ko-dic 사전을 이용하지만 사전을 압축하므로 기존 형태소 분석기와 비교하여 메모리를 적게 쓰고 훨씬 빠르다. 그럼 Docker에 엘라스틱서치 6.4와 Kibana 6.4를 설치하고 Nori 플러그인을 설치해서 한글 형태소분석기를 사용해보자. Docker에 Elasticsearch와 Kibana 설치12docker run -d -p 9200:9200 -p 9300:9300 --name elastic -e "discov..