레이블이 OpenSearch인 게시물을 표시합니다. 모든 게시물 표시
레이블이 OpenSearch인 게시물을 표시합니다. 모든 게시물 표시

2026년 7월 17일 금요일

match_only_text와 derived field를 선택하는 기준

저장 공간과 검색 기능, 계산 비용을 비교해 두 OpenSearch 필드 기능을 필요한 곳에만 적용하는 방법을 정리합니다. 여러 선택지를 한 번에 적용하기보다 ‘match_only_text’부터 확인합니다. 문서의 존재 여부 중심 검색에 맞춘 텍스트 필드입니다. 위치 정보가 필요한 구문·근접 검색이나 복잡한 점수 계산 요구가 있는지 먼저 확인합니다.

이 글의 범위
실제 경험이나 측정 결과를 가정하지 않고, 공식 문서로 확인 가능한 개념과 적용 순서를 일반 가이드로 설명합니다. 제품 버전과 서비스 정책은 바뀔 수 있으므로 적용 전 연결된 공식 문서를 다시 확인하세요.

처음 확인할 경계

match_only_text는 저장과 검색 기능의 균형을, derived field는 저장 시 계산과 조회 시 계산의 균형을 바꿉니다. ‘match_only_text’에서 시작해 ‘derived field’와의 경계를 정하면 구현할 범위와 실패했을 때 확인할 지점을 구분하기 쉬워집니다.

새 기능을 넓게 적용할 때 생기는 문제

  • 텍스트 필드는 모두 match_only_text로 바꾸기
  • derived field는 저장 공간을 쓰지 않으므로 비용이 없다고 생각하기
  • 검색 기능 차이를 확인하지 않고 기존 인덱스를 대체하기
  • OpenSearch 버전과 필드별 지원 범위를 무시하기

match_only_text와 derived field를 선택하는 기준 핵심 판단 흐름 설명용 개념도

그림 1. match_only_text와 derived field를 선택하는 기준의 핵심 판단 순서를 정리한 설명용 개념도입니다. 실제 서비스 화면, 운영 로그 또는 측정 결과가 아닙니다. 

필드 유형을 결정하는 순서

  1. 필드별 실제 검색·집계·정렬·강조 요구를 목록화합니다.
  2. 저장 공간, 수집 시간, 검색 계산 중 어느 비용을 줄일지 정합니다.
  3. 대조 인덱스에서 기능 호환성과 대표 쿼리 지연을 비교합니다.
  4. 자주 쓰는 계산은 저장 필드와 derived field 두 방식으로 비용을 측정합니다.
  5. 선택 이유와 제한을 매핑 문서에 남기고 인덱스 템플릿을 버전 관리합니다.

두 기능이 줄이는 비용과 늘리는 비용

match_only_text

문서의 존재 여부 중심 검색에 맞춘 텍스트 필드입니다. 위치 정보가 필요한 구문·근접 검색이나 복잡한 점수 계산 요구가 있는지 먼저 확인합니다.

derived field

저장 시 미리 만들지 않은 값을 검색 시 계산해 매핑 변경 부담을 줄일 수 있지만 조회 때 스크립트 계산 비용이 생깁니다.

원본 보존

derived field가 읽을 원본 필드와 형식이 안정적인지 확인합니다. 원본 스키마가 자주 바뀌면 계산 로직도 함께 관리해야 합니다.

쿼리 빈도

매우 자주 쓰는 계산 결과는 수집 시 저장하는 편이 나을 수 있고, 드물거나 실험적인 값은 derived field가 유리할 수 있습니다.

기능 제한 테스트

기존 쿼리를 그대로 실행해 정렬, 집계, 강조, 구문 검색 등 필요한 기능이 유지되는지 검증합니다.

실제 적용과 설명을 대조하기

확인 항목질문
첫 기준: match_only_text변경 전에 전제와 목적을 확인했는가?
분리 대상: derived field다른 책임과 섞이지 않게 경계를 정했는가?
피할 패턴: 텍스트 필드는 모두 match_only_text로 바꾸기본문에서 경고한 패턴이 남아 있지 않은가?
오류와 복구정상 경로뿐 아니라 실패와 되돌리기도 확인했는가?

적용 순서 요약

match_only_text는 저장과 검색 기능의 균형을, derived field는 저장 시 계산과 조회 시 계산의 균형을 바꿉니다. 필드별 사용 패턴을 측정해 필요한 곳에만 적용해야 실제 이득이 됩니다.


참고한 공식 문서

OpenSearch skip_list가 range 검색을 돕는 원리

숫자와 날짜 필드의 범위 검색에서 관련 없는 블록을 건너뛰는 skip_list의 적용 조건과 검증 방법을 설명합니다. 운영 단계에서 판단의 출발점은 ‘지원 필드’입니다. OpenSearch의 숫자·날짜 필드 문서에서 index.skip_list 옵션과 지원 조건을 확인합니다. 문자열로 저장된 숫자에는 같은 효과를 기대할 수 없습니다.

이 글의 범위
실제 경험이나 측정 결과를 가정하지 않고, 공식 문서로 확인 가능한 개념과 적용 순서를 일반 가이드로 설명합니다. 제품 버전과 서비스 정책은 바뀔 수 있으므로 적용 전 연결된 공식 문서를 다시 확인하세요.

OpenSearch skip_list가 range 검색을 돕는 원리 핵심 판단 흐름 설명용 개념도
그림 1. OpenSearch skip_list가 range 검색을 돕는 원리의 핵심 판단 순서를 정리한 설명용 개념도입니다. 실제 서비스 화면, 운영 로그 또는 측정 결과가 아닙니다.

skip_list를 검토할 조건

지원 필드

OpenSearch의 숫자·날짜 필드 문서에서 index.skip_list 옵션과 지원 조건을 확인합니다. 문자열로 저장된 숫자에는 같은 효과를 기대할 수 없습니다.

범위 쿼리 비중

정확 일치나 집계보다 넓은 기간·숫자 범위 검색이 실제 병목인지 프로파일링합니다. 쿼리 패턴이 다르면 이점도 달라집니다.

데이터 정렬과 분포

값 분포, 세그먼트 크기, 범위 선택도가 건너뛸 수 있는 블록 수에 영향을 줍니다. 한 샘플 쿼리 결과를 전체로 일반화하지 않습니다.

인덱싱 비용

추가 인덱스 구조는 저장 공간과 쓰기 비용을 사용할 수 있습니다. 검색 지연만 아니라 병합과 수집 처리량도 함께 측정합니다.

버전과 새 인덱스

옵션의 지원 버전과 매핑 적용 시점을 확인합니다. 기존 필드 매핑 변경은 새 인덱스와 재색인이 필요할 수 있습니다.

도구보다 먼저 볼 기준

skip_list는 range 쿼리에서 건너뛸 수 있는 구간이 있을 때 도움이 되는 선택적 최적화입니다. ‘지원 필드’에서 시작해 ‘범위 쿼리 비중’와의 경계를 정하면 구현할 범위와 실패했을 때 확인할 지점을 구분하기 쉬워집니다.

적용 효과를 비교하는 순서

  1. 운영과 유사한 데이터 분포와 대표 range 쿼리를 고릅니다.
  2. 같은 샤드·복제·캐시 조건의 대조 인덱스를 만듭니다.
  3. 지연의 중앙값과 상위 백분위, CPU, 디스크, 인덱싱 비용을 기록합니다.
  4. 좁은·중간·넓은 범위와 동시 요청 조건을 비교합니다.
  5. 효과가 확인된 필드만 새 인덱스 템플릿에 적용하고 되돌릴 절차를 둡니다.

변경 전 체크 포인트

확인 항목질문
첫 기준: 지원 필드변경 전에 전제와 목적을 확인했는가?
분리 대상: 범위 쿼리 비중다른 책임과 섞이지 않게 경계를 정했는가?
피할 패턴: 모든 numeric/date 필드에 일괄 적용하기본문에서 경고한 패턴이 남아 있지 않은가?
오류와 복구정상 경로뿐 아니라 실패와 되돌리기도 확인했는가?

설정만 켜고 결론 내릴 때의 문제

  • 모든 numeric/date 필드에 일괄 적용하기
  • 캐시가 데워진 한 번의 실행만 비교하기
  • 검색 속도만 보고 인덱싱·저장 비용을 누락하기
  • 현재 클러스터 버전과 공식 지원 조건을 확인하지 않기

결론

skip_list는 range 쿼리에서 건너뛸 수 있는 구간이 있을 때 도움이 되는 선택적 최적화입니다. 공식 지원 필드와 버전을 확인하고 실제 데이터 분포에서 검색·쓰기 비용을 함께 측정한 뒤 적용해야 합니다.


참고한 공식 문서

책 후기와 인용 중심 글을 해설형 콘텐츠로 바꾸는 법

긴 인용이나 줄거리 요약에 머물지 않고 질문과 해석, 적용 범위를 더해 독자에게 고유한 가치를 제공하는 방법을 설명합니다. 설정부터 시작하기 전에 ‘독자의 질문’을 분리해서 봐야 합니다. 책 전체를 요약하기보다 어떤 문제를 이해하기 위해 읽었는지...