TIL/엘라스틱 서치12 Elastic Search : Complete Guide to ElasticSearch - 관계형처럼 조인하기 [조인 쿼리] RDB보다는 몽고DB(조인을 아예 하지 않거나, 애플리케이션 수준에서 진행)같은 noSQL에서의 조인과 가깝다 비정규화는 데이터 저장소를 더 많이 먹지 않는가? ㅇㅇ 근데 es는 메인 저장소로 쓰지 않는 것을 추천하기 때문에 ㄱㅊ (검색만 빠르면 괜찮다 주의) es에서 간단한 조인 기능들을 제공하기는 하지만, 비효율적이기 때문에 많은 도큐먼트를 다룰 때는 좋지 않다 mapping 옵션에서 join property를 줄 수 있다. 아래 예시를 참고. (이때 department가 꼭 조인하는 인덱스의 명칭과 똑같을 필요는 없다.) PUT /department { "mappings": { "properties": { "join_field": { "type": "join", "relations":.. 2024. 2. 5. Elastic Search : Complete Guide to ElasticSearch - 매핑과 분석기에 대한 추천 [매핑에 대한 추천] 명시적 매핑을 사용해라 다이나믹 매핑이 편하긴 하지만 프로덕션에서 좋은 아이디어는 아니다. 많은 문서를 저장할 때는 최적화된 매핑이 저장소를 아낄 수 있다. dynamic을 false 가 아니라 strict 로 두라는 뜻 깜짝 놀랄만하거나 기대하지 못한 결과를 마주할 일이 없다. 항상 text이자 keyword로 멀티 매핑하는 것을 피해라 보통은 둘 중에 하나만 필요하다. 각 매핑은 디스크 공간을 필요로 한다. 전문 검색이 필요 > 텍스트 집계, 정렬, 필터링이 필요 > 키워드 coercion (강제 형변환)을 비활성화해라 강제 형변환은 올바르지 않은 행동도 용인하게 된다. 가능하면 항상 올바른 데이터 형을 사용해라. 적절한 숫자 데이터 형을 사용해라 int형이 충분한 경우가 많다... 2024. 2. 4. Elastic Search : Complete Guide to ElasticSearch - 리인덱싱 [기존 매핑을 업데이트하기] 일반적으로 업데이트 불가 기존 도큐먼트들을 업데이트하는 게 문제가 있기 때문 (ex. 텍스트 값들은 이미 분석되어 있음) 전체 데이터 구조를 다시 만들어야 할 수도 있음 비어있는 인덱스여도 매핑을 업데이트하거나 삭제하는 건 불가함. 방법은 새로운 인덱스로 옮기는 것 뿐.. “ignore_above” 옵션만 가능 [Reindex API] 새로운 매핑과 인덱스를 PUT 해준다. POST /_reindex API를 사용한다. POST /_reindex { "source": { "index": "reviews" }, "dest": { "index": "reviews_new" } } 리인덱싱은 생각보다 자주 필요하다 (비즈니스 요구사항이 바뀔 수도 있고.. 저장 형태를 바꿔야 할 수도.. 2024. 1. 21. Elastic Search : Complete Guide to ElasticSearch - 매핑 매핑 파라미터 [Array 타입] array 타입 같은 건 없다. 기본적으로 엘라스틱서치에서는 어떤 필드라도 0개 이상의 값을 가질 수 있기 때문 따라서 array 타입이라고 지정하지 않아도 array 로 저장 가능 내부 구현 텍스트 필드인 경우, 토큰화 하고 역인덱스로 저장하게 된다. [“Strings are simply”, “merged together”] 은 사실 각 단어 단위로 저장된 하나의 문장처럼 저장되는 것과 같다 특징 모든 array 내부에는 같은 데이터형이 사용되어야 한다. (단 강제 변환-coercion이 가능한 경우는 가능) ex) true, false, “true” -> 가능 다이나믹 매핑을 이용하는 경우는 강제 변환도 안됨. 형 변환에 의존하지 말자. (같은 형으로 저장하자..) .. 2024. 1. 21. Elastic Search : Complete Guide to ElasticSearch - Mapping & Analysis [analysis] text analysis 라는 말로도 불림 text 필드에 대해서만 가능 도큐먼트를 저장하기 전에 먼저 텍스트 값들이 분석된다. 검색할 때 편한 구조로 저장하기 위해서이다. 우리가 쿼리할 때 _source 를 기준으로 검색한다고 해도 탐색을 진행할 때 이걸 사용하진 않는다. analyzer의 3요소 Character filters 문자를 추가/제거. 변경한다 Analyzer은 0개 이상의 캐릭터 필터를 가진다. 정의된 순서대로 적용된다. ex) html_strip Tokenizer analyzer은 하나의 tokenizer를 갖는다 텍스트를 토큰화 한다. (이 때 문자는 제거될 수 있다) 텍스트를 단어 단위로 자르게 된다. 원본 문자열의 각 토큰에 대한 문자 offset을 별도로 저장.. 2024. 1. 17. Elastic Search : Complete Guide to ElasticSearch - Bulk API [Bulk API] 하나의 query로 많은 도큐먼트들을 indexing, update, delete 하는 방법. 각 줄의 끝에 줄 바꿈을 통해 실행 (NDJSON 형태) POST /_bulk {"index": {"_index": "products", "_id": 200}} // 액션 및 메타 데이터 정의 {"name": "Espresson Machine", "price":199, "in_stock":5} // 소스 도큐먼트 정의 {"create": { "_index": "products", "_id": 201}} {"name": "Milk Frother", "price": 149, "in_stock":14} [Create 액션과 index 액션의 차이] Create 액션은 이미 도큐먼트가 존재하면 fa.. 2024. 1. 16. 이전 1 2 다음