ElasticSearch 19

[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

[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

[ElasticSearch] ip type과, ip_range type 필드

필드 타입이 ip인 필드는 범위로 저장할 수 없고, 단일 ip만 저장이 가능하다. 필드 타입이 ip_range인 필드는 범위로 저장할 수 있고, 단일 ip로 저장할 수 없다. 구조는 저런 형식이다. 그리고 둘 다 데이터를 저장하는 방법도 다르다. type이 ip인 필드는 저장할 때 "GEAR_IP":"1.1.1.1" 이런 식으로 단일 데이터로 등록해야 한다. type이 ip_range인 필드는 저장할 때 gte와 lte를 사용해야한다. ip 타입에 ip_range 방식으로 등록을 시도하면 에러가 발생하고, ip_range도 ip 방식으로 등록을 시도하면 에러가 발생한다. 그런데 검색하는 방식은 둘 다 같은 방식으로 사용할 수 있다. ip 타입이어도 range를 써서 위 사진처럼 범위로 검색하면 해당되는 ..

ElasticSearch 2021.01.28

[ElasticSearch] exists로 필드 존재 여부 판단하기

엘라스틱서치로 데이터 검색 중에 종종 특정 필드가 없는 데이터만 뽑아오거나, 특정 필드가 있는 데이터만 뽑아야 하는 상황이 종종 있었는데 이럴 때 사용했다. { "query": { "bool": { "must": [ { "exists": { "field": "TW_CTR_GUARD_ID" } } ] } } } 위 쿼리는 TW_CTR_GUARD_ID 필드가 존재하는 데이터를 뽑는 쿼리이다. 반대로 저 필드가 존재하지 않는 데이터를 뽑고 싶으면 must말고 must_not으로 해서 검색하면 된다.

ElasticSearch 2021.01.28

[ElasticSearch] aggs key 값 sort

엘라스틱 서치에서 어그리게이션을 하면 기본적으로 나오는 순서는 doc_count가 높은 것부터(내림차순) 나온다. 여기서 doc_count가 아닌 key 값으로 오름차순 내림차순으로 뽑고 싶으면 { "order": { "_key" : "asc" } } , { "order": { "_key" : "desc" } }를 사용하면 된다. sort를 하고 싶으면 아래와 같이 사용하면 된다. doc_count를 오름차순으로 뽑고 싶으면 아래 처럼 하면 된다. order를 주지 않으면 기본 값으로 doc_count가 내림차순이다.

ElasticSearch 2021.01.28

[ElasticSearch] 특정필드 wildcard 여러개 검색하기

일레스틱서치를 계속 쓰면서 일반적으로 검색하는 경우는 대부분 다음과 같았다. 1. 1개의 필드에서 1개의 특정단어 검색 2. 1개의 필드에서 1개의 와일드카드로 단어 검색 3. 1개의 필드에서 여러개의 특정단어 검색 4. 여러개 필드에서 1개의 와일드카드로 단어 검색 등등 다양했는데 생각 나는게 이거밖에 없네... 각각 난 보통 이렇게 검색했다. 1번: term 2번: wildcard 3번: terms 4번: query_string 이게 답은 아니고 각각 또 다른 방식으로도 검색이 가능 하다. (방법은 다양) 내가 사용한 쿼리 예로는 다음과 같다. 1번 - 1개의 필드에서 1개의 특정단어 검색 { "query":{ "term":{ "USER_ID":"admin" } } } 2번 - 1개의 필드에서 1개의..

ElasticSearch 2020.05.12

[ElasticSearch] windows에 cerebro 설치

https://github.com/lmenezes/cerebro/releases lmenezes/cerebro Contribute to lmenezes/cerebro development by creating an account on GitHub. github.com 위 경로에 들어가서 zip파일을 다운 받는다. 다운 받은 zip 파일을 압축을 풀어주고 해당 폴더에 들어가서 bin폴더에 들어가면 이런식으로 있는데 cerebro.bat 파일을 실행 시켜주면 된다. 실행시켜주면 cmd 창이 열리면서 저렇게 로그가 찍힘 이제 확인해보고 싶으면 인터넷창을 열어서 http://localhost:9000을 주소창에 입력. 접속하면 이런 창이 뜨는데 Node address 입력칸에다가 접속하고자 하는 엘라스틱의 주소..

ElasticSearch 2020.01.03