Match-only text 필드 타입
Match-only text 필드 타입
match_only_text 필드는 문서 내 용어의 스코어링과 위치 정보가 중요하지 않은 전체 텍스트 검색을 위해 설계된 text 필드의 변형이에요. match_only_text 필드는 text 필드와 다음 방식으로 달라요.
- 위치(position), 빈도(frequency), 노름(norms) 저장을 생략해 저장 요구 사항을 줄여요.
- 스코어링을 비활성화해서 모든 매칭 문서가 1.0의 일정한 점수를 받아요.
- interval과 span 쿼리를 제외한 모든 쿼리 타입을 지원해요.
복잡한 랭킹과 위치 쿼리보다 효율적인 전체 텍스트 검색을 우선시하면서 저장 비용을 최적화하려면 match_only_text 필드 타입을 선택하세요. match_only_text를 사용하면 인덱스가 훨씬 작아져서, 특히 대규모 데이터셋에서 저장 비용이 낮아져요.
빈도와 위치를 저장하는 오버헤드 없이 특정 용어를 포함한 문서를 빠르게 찾아야 할 때 match_only_text 필드를 사용하세요. match_only_text 필드 타입은 관련성에 기반한 결과 랭킹이나 interval·span 쿼리처럼 용어 근접성이나 순서에 의존하는 쿼리에는 최선의 선택이 아니에요. 이 필드 타입은 구문(phrase) 쿼리를 지원하지만, 그 성능은 text 필드 타입을 사용할 때만큼 효율적이지 않아요. 문서 안에서 정확한 구문이나 그 위치를 식별하는 것이 중요하다면 text 필드 타입을 대신 사용하세요.
출처: 문서
본문
예시
match_only_text 필드가 있는 매핑을 만들어 볼게요.
PUT movies
{
"mappings" : {
"properties" : {
"title" : {
"type" : "match_only_text"
}
}
}
}
파라미터 (Parameters)
match_only_text는 text 필드에 사용 가능한 대부분의 파라미터를 지원하지만, 대부분을 수정하는 것은 오히려 역효과를 낼 수 있어요. 이 필드 타입은 단순하고 효율적으로 설계되어, 저장 비용을 최적화하기 위해 인덱스에 저장되는 데이터를 최소화해요. 따라서 기본 설정을 유지하는 것이 일반적으로 가장 좋은 접근 방식이에요. analyzer 설정 외의 수정은 오버헤드를 다시 도입하고 match_only_text의 효율성 이점을 상쇄할 수 있어요.
match_only_text 필드에 사용 가능한 모든 파라미터는 다음 표와 같아요.
| 파라미터 | 설명 |
|---|---|
analyzer |
필드에 사용될 analyzer예요. 기본적으로 색인 시점과 검색 시점 모두에서 사용돼요. 검색 시점에 재정의하려면 search_analyzer 파라미터를 설정해요. 기본값은 문법 기반 토큰화를 사용하고 Unicode Text Segmentation 알고리즘에 기반한 표준 analyzer예요. |
boost |
모든 히트에 1점이 할당되고 boost가 곱해져 쿼리 절의 최종 점수가 만들어져요. |
eager_global_ordinals |
refresh 시 global ordinals를 미리 로드할지 여부를 지정해요. 필드가 집계에 자주 사용된다면 이 파라미터를 true로 설정해야 해요. 기본값은 false예요. |
fielddata |
정렬, 집계, 스크립팅을 위해 분석된 토큰에 접근할지 여부를 지정하는 불리언 값이에요. 기본값은 false예요. |
fielddata_frequency_filter |
문서 빈도가 min과 max 값(절대 수 또는 백분율로 제공) 사이인 분석된 토큰만 메모리에 로드하도록 지정하는 JSON 객체예요. 빈도는 세그먼트별로 계산돼요. 파라미터: min, max, min_segment_size. 기본값은 모든 분석된 토큰을 로드하는 거예요. |
fields |
같은 문자열을 여러 방식으로 색인하려면(예: keyword와 text로 모두) fields 파라미터를 제공해요. 검색에 사용할 필드 버전과 정렬·집계에 사용할 필드 버전을 각각 지정할 수 있어요. |
index |
필드를 검색 가능하게 할지 여부를 지정하는 불리언 값이에요. 기본값은 true예요. |
index_options |
이 파라미터는 수정할 수 없어요. |
index_phrases |
지원되지 않아요. |
index_prefixes |
지원되지 않아요. |
meta |
이 필드에 대한 메타데이터를 받아요. |
norms |
노름은 비활성화되어 있으며 활성화할 수 없어요. |
position_increment_gap |
위치(position)는 비활성화되어 있지만, position_increment_gap은 구문 쿼리에서 사용될 때 text 필드와 유사하게 동작해요. 그런 쿼리는 더 느릴 수 있지만 여전히 기능해요. |
similarity |
similarity를 설정해도 영향이 없어요. match_only_text 필드 타입은 similarity에 의존하는 more_like_this 같은 쿼리를 지원하지 않아요. similarity에 의존하는 쿼리에는 keyword 또는 text 필드를 사용하세요. |
term_vector |
용어 벡터는 지원되지만, 이 필드의 주요 목적(저장 최적화)과 모순되므로 사용을 권장하지 않아요. |
text 필드에서 match_only_text로 마이그레이션
Reindex API를 사용해 대상 인덱스의 올바른 매핑을 업데이트함으로써 text 필드에서 match_only_text로 마이그레이션할 수 있어요.
다음 예시에서 소스 인덱스는 text 타입의 title 필드를 포함해요.
title 필드가 match_only_text로 매핑된 대상 인덱스를 만들어요.
PUT destination
{
"mappings" : {
"properties" : {
"title" : {
"type" : "match_only_text"
}
}
}
}
데이터를 재색인해요.
POST _reindex
{
"source": {
"index":"source"
},
"dest": {
"index":"destination"
}
}