분류 전체보기137 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. Elastic Search : Complete Guide to ElasticSearch - 낙관적 동시성 제어 [도큐먼트 버저닝] 도큐먼트 버저닝은 과거의 버전으로 돌아갈 수 있다는 뜻은 아니다. 각 도큐먼트의 메타데이터 필드에 _version 값으로 저장한다. _version 값의 특징 (internal versioning) 해당 값을 integer 형이다. 도큐먼트를 수정할 때마다 1씩 증가한다. 도큐먼트를 삭제할 때는 60초간 유지한다. 같은 ID의 새 도큐먼트를 60초 내에 삽입하면 버전이 증가하고 아니면 reset 된다. external versioning 버전이 엘라스틱서치 밖에서 유지될 때 사용된다. ex) RDBMS에 도큐먼드가 저장될 때 등 (메인 DB로는 관계형 DB를, 검탐색을 위해서만 es를 사용하는 경우 등) 버저닝의 장점 도큐먼트가 수정된 횟수를 알 수 있다. (현재는 그렇게 유용한 정보.. 2024. 1. 14. Elastic Search : Complete Guide to ElasticSearch - 도큐먼트 라우팅 [도큐먼트 라우팅] 엘라스틱 서치는 어떤 샤드에 어떤 도큐먼트를 담아야 할지 어떻게 알까? 아래의 계산식을 통해서 결정한다. shard_num = hash(_routing) % num_primary_shards primary shard의 수(replica는 고려하지 않음)는 고정되어 있으니 _routing(도큐먼트의 id 같은 값)의 hash 값을 샤드의 수로 mod 연산을 진행하는 것이다. 따라서 해당 id 값을 검색하게 되면 모드 연산을 진행해 탐색해야 할 샤드를 알 수 있다. 이게 엘라스틱 서치의 기본 디폴트 라우팅 전략이다. (커스텀 라우팅 전략을 세우는 것도 가능하다.) 이 방법으로 샤드마다 도큐먼트의 수가 동일하게 유지할 수 있다. id 필드가 아니라 다른 필드를 모드 연산에 이용하고 싶다면 .. 2024. 1. 8. Elastic Search : Complete Guide to ElasticSearch - 도큐먼트 관리 도큐먼트 업데이트 방법 [도큐먼트 업데이트(필드 추가) 쿼리] PUT /products/_update/100 { "doc": { "tages": ["electronics"] } } 사실 도큐먼트는 immutable(불변)하다. 위 쿼리는 실제로 도큐먼트 자체를 바꾼 것이 아니라 같은 ID의 도큐먼트를 필드가 추가한 것으로 바꿔치기 한 것으로 이해하면 된다. UPDATE API를 통해서 엘라스틱 서치는 이를 내부 구현으로 제공하는데, 만약 사용자가 직접 이를 구현하고자 한다면 삭제 요청과 생성 요청, 두 개를 보내야 하기 때문에 네트워크 지연과 부하를 줄 수 있다. [scripted updates] 필드를 업데이트할 때, 기존 값을 모른다면 scripted updates 방식을 취할 수 있다. 예를 들어 .. 2024. 1. 8. 이전 1 2 3 4 5 ··· 23 다음