elasticsearch 20

[ElasticSearch] dynamic strict 옵션

https://minu0807.tistory.com/106 [ElasticSearch]index 생성시 DynamicTemplate 사용 일반적으로 인덱스를 생성할 때 맵핑 정보를 지정하고 사용하다 보면, 불편한 점이 있다. 이런 식으로 인덱스가 생성되었다고 할 때, 저기에 입력된 4개의 맵핑 정보를 제외하고 실수로 다른 정 minu0807.tistory.com 이 글에서 잠깐 언급했던 옵션이다. 인덱스를 만들면서 맵핑 정보를 지정할 때 저 옵션을 넣고, 인덱스를 생성한 다음에 데이터를 넣을 때, 없는 맵핑 정보가 포함된 데이터가 들어오면 에러가 발생한다. displayName: 'BadRequest', path: '/user_test2/_doc', query: {}, body: { error: { ro..

ElasticSearch 2022.05.15

[NodeJS] node-schedule을 이용한 elasticsearch 인덱스 생성

지금 작성하는 글은 https://minu0807.tistory.com/117 [NodeJS] ElasticSearch API getTemplate(index_template) 인덱스 템플릿(index_template)? 인덱스를 생성할 때 맵핑 정보를 입력해서 생성해야 한다. 맵핑 정보 입력 없이 그냥 생성하고 데이터를 넣으면 필드 맵핑이 이상하게 만들어져서 데이터 조회나, 어 minu0807.tistory.com 이 글과 연관된 글이기도 하다. 위 글에 언급한 연도 단위로 인덱스를 사용하면서 발생한 문제를 해결하고자 node-schedule을 이용했다. 로직 구조는 간단하다. 1. 매일 00시00분01초에 moment를 이용해 다음날 날짜를 뽑는다. (2021-01-03일에서 2021-01-04일이 ..

Node.js 2022.01.06

[NodeJS] ElasticSearch API getTemplate(index_template)

인덱스 템플릿(index_template)? 인덱스를 생성할 때 맵핑 정보를 입력해서 생성해야 한다. 맵핑 정보 입력 없이 그냥 생성하고 데이터를 넣으면 필드 맵핑이 이상하게 만들어져서 데이터 조회나, 어그리게이션 등이 정상적으로 되지 않는다. 매번 인덱스를 생성할 때 셋팅 정보, 맵핑 정보 입력하는 게 정말 귀찮다. 이런 불편한 점을 해결하는데 인덱스 템플릿을 사용하면 좋다. https://www.elastic.co/guide/en/elasticsearch/reference/current/index-templates.html Index templates | Elasticsearch Guide [7.16] | Elastic This topic describes the composable index tem..

Node.js 2022.01.03

[NodeJS] bulk 데이터 파일 읽어서 ElasticSearch에 등록하기

https://minu0807.tistory.com/114 여기랑 이어지는 내용이기도 함. const fs = require('fs'); const es_client = require('./client'); async function asyncForEach (array, callback) { for (let index = 0; index { console.log(name); let data = fs.readFileSync('./_bulk/' + name, 'utf8'); let bulk = await es_client.bulk({ body: data }) console.log(bulk); }) } catch (err) { console.error(err); } } run(); _bulk 디렉터리에 벌크 ..

Node.js 2021.11.25

[NodeJS] Multer를 이용해 파일 ElasticSearch에 등록하기

https://minu0807.tistory.com/111 [VueJS] NuxtJS+VuetifyJS 파일 업로드 기능 만들어보기 NuxtJS와 VuetifyJS를 이용해 만들었습니다. 최종 목표는 1. NuxtJS 웹에서 첨부한 파일을 Express로 넘겨준다. 2. Express에서 Multer를 이용해 ElasticSearch에 데이터를 생성한다. 이렇게이고, 이 글에서는 1번.. minu0807.tistory.com 이 글의 2번째 목표에 해당하는 글입니다. 우선 엘라스틱에 데이터를 넣기 위해 만든 인덱스의 맵핑 정보. file_content : 파일 바이너리 값 file_mk_dt : 파일 등록일 file_name : 파일명 file_size : 파일 사이즈 여기서 알아두어야 할게 file_c..

Node.js 2021.11.20

[ElasticSearch] _bulk 중 action_request_validation_exception 에러

벌크 데이터를 넣으려고 했을 때 { - "error": { - "root_cause": [ - { - "type": "action_request_validation_exception", "reason": "Validation Failed: 1: type is missing;" } ], "type": "action_request_validation_exception", "reason": "Validation Failed: 1: type is missing;" }, "status": 400 } 이런 에러가 출력된다면 인덱스, 타입 부분 쪽을 다시 확인해볼 것. 내가 했던 실수는 {"index":{"_index":"index_name"}} {"field1":"value1","field2":"value2"} 이..

ElasticSearch 2021.10.07

[ElasticSearch]index 생성시 DynamicTemplate 사용

일반적으로 인덱스를 생성할 때 맵핑 정보를 지정하고 사용하다 보면, 불편한 점이 있다. 이런 식으로 인덱스가 생성되었다고 할 때, 저기에 입력된 4개의 맵핑 정보를 제외하고 실수로 다른 정보를 입력하면 위에 보이는 user_addr처럼 저런 형식의 맵핑 정보가 생성된다. 저렇게 되면 search가 6.x.x 버전에선 안되던 걸로 기억하는데 7.x.x 버전에선 검색이 되긴 했다. 하지만 저런 식으로 지정되지 않은 맵핑 정보가 추가되면 해당 필드로는 어그리게이션이 안된다. 그래서 뒤늦게 맵핑 정보를 추가하려고 해도 이미 저렇게 생성이 되어버리면 인덱스를 다시 만들어야 한다. (이게 가장 큰 문제) index_template이라도 있으면 인덱스 템플릿을 수정하고 리인덱스를 하면 되지만, 없다면 인덱스를 지우고..

ElasticSearch 2021.09.18

[ElasticSearch] search_after 사용하기

이론적인 내용은 많은 사람들이 다룬 글들이 많기 때문에 간략하게 사용방법만 작성 쿼리에다가 sort를 주고 검색을 하면 결괏값 안에 각 hits 별로 sort 값이 출력이 된다. 이런 식으로 출력이 되는데 현재 사용한 쿼리는 따로 size를 주지 않아서 총 725개의 데이터 중에서 CC_MK_DT를 기준으로 오름차순 정렬 후 10개의 데이터만 출력이 됐다. 여기서 이제 다음 10개의 데이터를 조회하고 싶으면 마지막 데이터의 sort 값을 쿼리에다가 search_after와 값을 넣어주면 된다. 이런 식으로 search_after에다가 계속 결과 값의 맨 마지막 sort 값을 넣어서 조회하면 끝까지 조회할 수 있다. 만약 맨 끝에 도달하면 이렇게 아무것도 안 나온다.

ElasticSearch 2021.03.30