본문 바로가기

반응형

Elasticsearch

(47)
Elasticsearch 결과에 "_ignored" 가 나오는 이유 es 에서 검색 결과를 보다가 발견한 "_ignored" 필드 ! "_ignored": [ "description.keyword" // ? ], 이게 뭘까 query 날릴 때 분명 description 관련한 것은 아무것도 없는데 왜 _ignored 가 뜨며 description.keyword 가 왜 ignored 되었는지? Es 결과 { "took": 9, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 5, "relation": "eq" }, "max_score": 89.01466, "hits": [ { "_index": "test_i..
[Elasticsearch] date format 날짜 형식 정리 Elasticsearch date foramt elasticsearch date 날짜에 사용할 수 있는 형식들 알아보기 Es에서 사용할 수 있는 형식은 Date math 표현, 이미 가지고 있는(built in formats) 규격 형식들과 커스텀 형식 이렇게 총 3가지로 나누어진다. 1. Date math expression Date Math 에 대해서는 예전에 작성한 포스팅 참고! [Elasticsearch] Data Math 개념과 계산하는 방법 Elasticsearch range queries에서 또는 datarange aggregations에서 사용되는 Date Math 알아보기 1) 기본 단위들 기본 단위들은 아래와 같다. supported units y Years M Months w Week..
[Elasticsearch] Aggregations 집계 총정리 Elasticsearch Aggregations, 집계 Elasticsearch 는 검색뿐 아니라 여러가지 연산을 할 수 있는 Aggregation 기능이 있다. Kibana에서 차트, 그래프 등으로 시각화시킬 때 사용하는 기능이 aggregation 이다. aggregations 에는 두 가지 종류가 있다. - Metrics aggregation : 숫자 또는 날짜 필드의 값으로 계산함 - Bucket aggregation : 범위나 keyword 값으로 그룹화함 그리고 확장하여 사용할 수 있는 aggregations 도 있다. - Sub-aggregation : bucket 하위 집계 - Pipeline-aggregation : metrics aggregation 결과로 다시 집계 Metrics ag..
[Elasitcsearch] Pipeline-Aggregation 개념 및 예제 Elasticsearch Aggregations, 집계 Elasticsearch 는 검색뿐 아니라 여러가지 연산을 할 수 있는 Aggregation 기능이 있다. Kibana에서 차트, 그래프 등으로 시각화시킬 때 사용하는 기능이 aggregation 이다. aggregations 에는 두 가지 종류가 있다. - Metrics aggregation : 숫자 또는 날짜 필드의 값으로 계산함 - Bucket aggregation : 범위나 keyword 값으로 그룹화함 그리고 확장하여 사용할 수 있는 aggregations 도 있다. - Sub-aggregation : bucket 하위 집계 - Pipeline-aggregation : metrics aggregation 결과로 다시 집계 이 포스팅에서는 집..
[Elasticsearch] bucket sub-aggregation 하위 집계 Elasticsearch Aggregations, 집계 Elasticsearch 는 검색뿐 아니라 여러가지 연산을 할 수 있는 Aggregation 기능이 있다. Kibana에서 차트, 그래프 등으로 시각화시킬 때 사용하는 기능이 aggregation 이다. aggregations 에는 두 가지 종류가 있다. - Metrics aggregation : 숫자 또는 날짜 필드의 값으로 계산함 - Bucket aggregation : 범위나 keyword 값으로 그룹화함 그리고 확장하여 사용할 수 있는 aggregations 도 있다. - Sub-aggregation : bucket 하위 집계 - Pipeline-aggregation : metrics aggregation 결과로 다시 집계 이 포스팅에서는 S..
[Elasticsearch] Bucket Aggregations 버킷 집계 정리 Elasticsearch Aggregations, 집계 Elasticsearch 는 검색뿐 아니라 여러가지 연산을 할 수 있는 Aggregation 기능이 있다. Kibana에서 차트, 그래프 등으로 시각화시킬 때 사용하는 기능이 aggregation 이다. aggregations 에는 두 가지 종류가 있다. - Metrics aggregation : 숫자 또는 날짜 필드의 값으로 계산함 - Bucket aggregation : 범위나 keyword 값으로 그룹화함 그리고 확장하여 사용할 수 있는 aggregations 도 있다. - Sub-aggregation : bucket 하위 집계 - Pipeline-aggregation : metrics aggregation 결과로 다시 집계 이 포스팅에서는 B..
[Elasticsearch] Metrics Aggregations 집계 정리 Elasticsearch Aggregations, 집계 Elasticsearch 는 검색뿐 아니라 여러가지 연산을 할 수 있는 Aggregation 기능이 있다. Kibana에서 차트, 그래프 등으로 시각화시킬 때 사용하는 기능이 aggregation 이다. aggregations 에는 두 가지 종류가 있다. - Metrics aggregation : 숫자 또는 날짜 필드의 값으로 계산함 - Bucket aggregation : 범위나 keyword 값으로 그룹화함 그리고 확장하여 사용할 수 있는 aggregations 도 있다. - Sub-aggregation : bucket 하위 집계 - Pipeline-aggregation : metrics aggregation 결과로 다시 집계 이 포스팅에서는 M..
[Elasticsearch] mapping field 수정 추가 삭제 Elasticsearch에 index를 처음 만들 때 , 필드는 어떤 것을 넣을 건지 보여주는 mappings와 analyzer, tokenizer, filter 등을 이용 및 custom 할 수 있는 settings를 함께 설정해 준다. 이 때, mapping또는 settings를 다시 세팅하고 싶은 경우가 있는데 불가능하고 다시 새로운 인덱스를 만들어 reindex해야 한다. 가능한 것은 _mappings에 새로운 field를 추가할 수 있다. 하지만 이미 만들어진 필드를 삭제하거나 타입/설정값을 수정하는 것은 불가능하다. 만약 운영 중인 es 클러스터라면 다운타임없이 진행하기위해 alias설정 후 reindex를 하면 된다. alias 설정해서 Reindex 하기 [Elasticsearch] ind..
[Elasticsearch] Analyzer, Tokenizer, Filter 개념 및 활용 방법 Elasticsearch Analyzer & Tokenizer & Filter 개념 및 사용 방법 Elasticsearch 에서 index를 만들 때 settings와 mappings를 정해주는 것이 좋다. settings는 해당 Index에서 사용할 analyzer, tokenizer, filter들을 세팅할 수 있다. 그리고 mappings에는 사용할 필드들을 선언하고 타입 등을 설정해 주는데, settings에 만들어 놓은 analyzer, tokenizer, filter을 각 필드 별로 적용하여 더 정확한 검색이 가능하다. 먼저 index를 새로 생성하기 전에 _analyze 로 임의의 text가 tokenizer, filter 로 어떻게 분석되는지 알아보면 좋다. Text가 Elasticsear..
[Elasticsearch] bool 복합 query 개념 정리 및 예제 Elasticsearch bool 복합쿼리 개념 정리 및 실습 / 예제 elasticsearch 검색에 있어 정확한 검색을 위해 bool 쿼리는 기본적으로 쓰이는 아주 유용한 query이다. 그동안 기존 코드를 사용하고 대강만 알고 있었는데 elasticsearch guide book 을 통해 정확하게 공부하고 정리해 보았다. match_all, match, match_phrase을 구별할 줄 안다면 Bool query는 금방 습득할 수 있다. 여러 조건을 모두 통합해서 검색을 할 때 상위에 Bool query를 사용한다. bool query는 다음과 같은 4개의 인자를 가지고 있다. Bool Query must 반드시 해당 쿼리가 도큐먼트에 존재해야 검색됨 must_not 쿼리가 거짓인 도큐먼트들을 검..
[Elasticsearch] object vs nested 설명 및 예제 Elasticsearch object vs nested Obeject - 한 필드 안에 하위 필드를 넣는 Object - es는 따로 배열타입의 필드를 따로 선언하지 않고 필드 타입 값만 동일하다면 배열로 그냥 넣으면 된다. -> Search 등 사용 방법은 동일하다. ex. { "title": "A" } ex. { "title": ["A", "B"] } Object mapping "characters"라는 object를 가진 인덱스 test_index mapping하기 PUT test_index { "mappings": { "properties": { "characters": { "properties": { "name": { "type": "text" }, "age": { "type": "byte" }..
[elasticsearch] PUT vs POST 사용법 및 차이 Elasticsearch PUT vs POST 사용법 및 차이 알아보기 PUT, 입력 - 데이터 입력 기능 - 데이터 수정 기능 : 존재하는 _id값이 있다면 Update 데이터를 한다. - 존재하는 _id값에 데이터 수정을 하기 싫다면 _create를 사용하면 에러가 낼 수 있다. - [ 인덱스/_doc/_id value] 형태이며 _id 값이 없으면 입력 오류가 난다. (_id 자동 생성 기능 없음 - POST는 있음) kibana로 실습해보기 PUT test_index/_doc/1 { "title": "제목1", "content": "내용1" } test_index라는 Index _doc / 1 (_id 지정해주기)에 아래 내용을 입력해준다. 결과 { "_index" : "test_index", "..
[elasticsearch] match_all, match, match_phrase 사용 방법 및 차이점 match_all, match, match_phrase 사용 방법 및 차이점 실습 전, 준비사항 test_index에 먼저 bulk로 데이터 입력해주기 & kibana POST test_index/_bulk {"index": {"_id":1}} {"message": "The little cute cat" } {"index": {"_id":2}} {"message": "The little cute cat eats the red fish" } {"index": {"_id":3}} {"message": "The little cute cat eats the brown fish" } {"index": {"_id":4}} {"message": "The cute cat little fish" } {"index": {..
[elasticsearch] preference 사용해야 하는 이유 / 방법 및 예제 알아보기 Elasticsearch search query를 날릴 때 Preference 옵션을 주어야하는 이유 그리고 그 방법 알아보기 Preference 란 ? search query를 날릴 때, elasticsearch는 디폴트로 예비 후보 nodes과 shards 중 랜덤하게 요청을 보낸다. (이 설명으로 유추해보면 primary로는 보내지 않는 것 같다.) 이 때 어떠한 shard 또는 Replica를 query search에 사용할지 유저가 "선호"를 미리 설정할 수 있는 것이 Preference option이다. Preference를 사용하지 않으면 ? ==> query 결과가 매번 다르게 된다. 똑같은 쿼리로 검색 시에 데이터의 결과 정렬이 달라질 수 있다. 검색 결과의 정렬은 es score 순으로..
[Elasticsearch] ELK란? 클러스터, 노드, 샤드에 대해 알아보기 Elastic ELK (Elasticsearch, Logstash, Kibana) Elasticsearch : 아파치 루씬 기반으로 JAVA로 개발된 분산형 RESTful 검색 및 분석 엔진 JAVA로 만들어져 JAVA 실행 가능한 환경이라면 어디서든 구동이 가능 오픈소스, 실시간 분석(real-time search), 전문 (full text) 검색 엔진, RESTful API, 멀티 테넌시, 역색인의 특징을 가짐 * 멀티 테넌시란? - 서로 다른 인덱스들을 별도의 커넥션없이 하나의 질의로 묶어서 검색, 결과도 하나의 출력으로 도출할 수 있는 특징 Logstash : 데이터 집계, 변환, 저장하는 오픈 소스 서버의 데이터 처리 파이프라인 데이터 수집을 위한 도구, Elasticsearch의 입력 수단으..
[elasticsearch] 필드 값이 존재하지않는 경우 query 만들기 Elasticsearch 에서 특정 field 값이 존재하지 않는 데이터를 찾을 때 쓰는 query 정리 exists 사용하기 GET test_index/_search { "query": { "constant_score": { // 이것도 함께 써주어야 오류가 안 난다. "filter": { "exists": { "field": "name" // "field" : "필드명" 적어주기 } } } } } 이렇게 exists를 사용하면 해당 필드 (위에서는 "name") 이 존재하는 데이터만 추려서 보여준다. 만약 type이 "nested"인 경우 query에 nested 추가하기 GET test_index/_search { "query": { "nested": { "path": "countries", "qu..
[Elasticsearch] Data Math 개념과 계산하는 방법 Elasticsearch range queries에서 또는 datarange aggregations에서 사용되는 Date Math 알아보기 1) 기본 단위들 기본 단위들은 아래와 같다. supported units y Years M Months w Weeks d Days h Hours H Hours m Minutes s Seconds 그리고 위의 단위들로 + - 기호를 사용해서 날짜를 계산할 수 있다. 2) 예시 ex) now == 2023-01-01 12:01:01 라고 할 때, 계산식 풀이 결과 now+1h now + 1 시간 2023-01-01 13:01:01 now-1h now - 1 시간 2023-01-01 11:01:01 now/m rounded down to the start of the m..
[Elasticsearch] analyzer [ ] contains filters [ ] that are not allowed to run in index time mode ERROR : "analyzer [analyzer_name] contains filters [synonyms_name] that are not allowed to run in index time mode." 위와 같은 에러가 나와서 찾아보니 동의어 txt 추가 할 때 updateable:true 를 주어서 에러가 난 것이었다. 이걸 지워주니 에러가 안나도 index가 잘 생성되었다. PUT keyword_test_v1 { "mappings" : { "properties" : { "tag" : { "type" : "text", "fields": { "nori": { "search_analyzer":"standard", "analyzer": "nori_mixed_analyzer", "type": "text"..
[Elasticsearch] synonyms 동의어 사전 추가 및 업데이트 적용하기 Elasticsearch 동의어란? 검색 엔진의 최고봉(?)인 elasticsearch에서 동의어 기능은 일상생활 검색 기능에서 필수적인 부분이다. "동의어" 라는 말 그대로 A라는 단어(검색어)를 B와 동일하게 볼 수 있도록 하는 기능이다. 지역별 단어 사용 차이라던지, 복수 단수 형 차이라던지 아니면 일반적인 동의어 영역에서 거의 비슷한 단어들이 존재하는 경우 또는 전문가와 비전문가의 언어차이 등에 동의어 기능을 사용하면 유저의 검색 경험을 훨씬 수월하게 만들 수 있습니다. examples ex1) lift => elevator ex2) houses => house ex3) tired => exausted ex4) iPod, ipod => i-Pod ex5) canine => dog elasticse..
[elasticsearch] search after란? 사용 방법 알아보기 with node.js Elasticsearch 는 한번에 최대 10,000개의 도큐먼트만 반환한다. 이 외에 size를 정해서 query를 날려 조회해올 경우에도 이전에 조회해온 것 이후부터 다시 가져올 때 필요한 기능이 search_after이다. 실습해보기 🐠 1. after_test 인덱스 생성 PUT after_test { "mappings": { "properties": { "id": { "type": "keyword" }, "place": { "type": "keyword" }, "reviews": { "type": "text" } } } } 2. 데이터 5개 입력 POST after_test/_doc { "id": 5, "place": "섬진강", "reviews": "ㄹ리뷰" } x 5 3. 일반적인 방법으로 ..
[Elasticsearch + Node.js] 좌표 거리 구하기 with script_fields arcDistance Elasticsearch db 안에 있는 데이터들의 위치와 나의 (또는 유저의) 좌표로 부터 얼마나 떨어져 있는지 거리를 나타내기 실습해보기 🐸 1. Elasticsearch distance_test 라는 index 추가 PUT distance_test { "mappings": { "properties": { "place": { "type": "text" }, "location": { "type": "geo_point" }, "reviews": { "type": "text" } } } } 2. distance_test 인덱스에 데이터 추가 POST distance_test/_doc { "place": "추어탕집", "location": [128.123123, 34.123123] } POST distanc..
[elasticsearch] dis_max란 무엇인지 알아보기, 실습하기 (bool, must와 함께 쓰기) dis_max 정확한 일치하는 문서에 더 높은 점수를 주기 위한 방법 - dis_max(DisjunctionMaxQuery에서 따온 용어) dis_max는 멀티 키워드 검색할 때, 여러 필드에서 검색 수행 시 멀티 키워드의 키워드와 동일한 키워드의 score에 더욱 높은 점수를 주는 방식이다. (하지만 반전이 있었으니...) 실습해보기 dis_max_test 라는 인덱스 생성 PUT dis_max_test { "mappings": { "properties": { "title": { "type": "text" }, "description": { "type": "text" } } } } 데이터 입력 POST dis_max_test/_doc { "title": "Autobiography of Osho", "d..
Elasticsearch geographic location query distance 거리로 가까운 곳 검색하기 1. Elasticsearch 의 GEO DATA TYPE 1) geo_point Logitude 경도, Latitude 위도를 사용하는 geo_point는 radius (반경) 내의 특정 범위 내를 검색할 수 있다. "point" 어느 지점을 딱 포인트한다 라고 이해했다 . 2) geo_shape geo_shape은 GeoJson을 사용하여 복잡한 그래프를 나타낸다. 만약 거~ 대한 박물관이 존재한다면 해당 박물관의 좌표는 한 "point"에서 끝나지않고 큰 범위를 이룰 것이다. 이 때 사용하는 것이 geo_shape 이다. 2. Elsaticsearch Geo_point search 검색 사용 방법 filter에 geo_distance를 걸어준다. filter: { geo_distance: { dis..
운영중인 Elasticsearch reindex alias 무중단 예제 코드 및 사용 방법 / Zero downtime reindex alias Reindex란 ? 데이터를 입력하는 것 Reindex를 하는 이유는 ? 1) index의 mapping을 수정해야 할 때 - analyzer, analyzer's definition 등을 수정 시 2) Cluster upgrade or migration - Elasticsearch version 5.x 이하일 경우 ES가 index를 읽을 수가 없어서 이런 경우에도 Reindex 진행 3) 새로운 index에 기존의 데이터를 재입력하고 싶을 때 - 하지만 Reindex라는 말 그대로 mapping 정보 등은 제외하고 only 데이터만 가져옴 Reindex 실행 전 반드시 알아야할 점은? 1) _source 가 enabled 상태인 Index만 reindex가 가능 2) mapping정보까지 카피하는 것..

반응형