Fields 매핑 파라미터
Fields 매핑 파라미터
fields 매핑 파라미터는 추가 하위 필드를 정의해 같은 필드를 여러 방식으로 인덱싱할 수 있게 해줘요. multi-fields를 사용하면 하나의 데이터 표현에서는 전체 텍스트 검색을, 다른 표현에서는 정확히 일치시키는 연산을 수행할 수 있어요.
출처: 문서
본문
fields 매핑 파라미터는 추가 하위 필드를 정의해 같은 필드를 여러 방식으로 인덱싱할 수 있게 해줍니다. multi-fields에서 기본 필드 값은 주 매핑을 사용해 저장됩니다. 또한 다양한 검색 및 집계 요구를 지원하는 대체 매핑(예: 다른 데이터 타입이나 분석기)으로 하나 이상의 하위 필드를 구성할 수 있습니다.
Multi-fields는 데이터의 한 표현에서는 전체 텍스트 검색을, 다른 표현에서는 정확히 일치시키는 연산(정렬 또는 집계 등)을 수행해야 할 때 특히 유용합니다. 또한 같은 필드를 다른 분석기로 인덱싱할 수도 있습니다. 예를 들어 한 하위 필드는 일반 텍스트 검색에 기본 분석기를 사용하고, 다른 하위 필드는 자동 완성이나 퍼지 매칭을 지원하기 위해 n-gram을 생성하는 맞춤형 분석기를 사용할 수 있습니다.
Multi-fields 구성
다음 예제에서는 title 필드가 전체 텍스트로 분석되는 articles라는 인덱스를 만듭니다. fields 아래에 raw라는 하위 필드가 정의되어 정확히 일치시키는 쿼리를 위해 같은 값을 keyword로 저장합니다.
PUT /articles
{
"mappings": {
"properties": {
"title": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
}
다른 분석기 사용
다음 예제에서는 같은 title 필드를 두 개의 다른 분석기로 인덱싱합니다. 주 필드는 전체 텍스트 검색에 기본 분석기를 사용하고, ngrams 하위 필드는 자동 완성 같은 기능을 지원하는 맞춤형 n-gram 분석기를 사용합니다.
PUT /articles
{
"settings": {
"analysis": {
"analyzer": {
"ngram_analyzer": {
"tokenizer": "ngram_tokenizer",
"filter": [
"lowercase"
]
}
},
"tokenizer": {
"ngram_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 4,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
},
"ngrams": {
"type": "text",
"analyzer": "ngram_analyzer"
}
}
}
}
}
}
문서 인덱싱
인덱스가 생성된 후 문서를 인덱싱할 수 있습니다. title 필드는 매핑에 정의된 대로 처리되며, 하위 필드들은 같은 값의 대체 표현을 제공합니다.
PUT /articles/_doc/1
{
"title": "Understanding Multi-Fields in Search"
}
Multi-fields 쿼리
쿼리에서 추가 하위 필드를 대상으로 삼아 다양한 요구에 맞출 수 있습니다. 예를 들어 title의 정확한 값에 집계하려면 다음 요청으로 title.raw 하위 필드를 쿼리합니다.
POST /articles/_search
{
"size": 0,
"aggs": {
"titles": {
"terms": {
"field": "title.raw"
}
}
}
}
keyword로 매핑된 title.raw 하위 필드는 원래 title 필드가 전체 텍스트로 분석되더라도 정확히 일치시키는 집계를 허용합니다.
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"titles": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "Understanding Multi-Fields in Search",
"doc_count": 1
}
]
}
}
}
또는 자동 완성 기능을 사용하려면 title.ngrams 하위 필드에 match 쿼리를 실행할 수 있습니다.
POST /articles/_search
{
"query": {
"match": {
"title.ngrams": "Und"
}
}
}
title.ngrams 하위 필드는 맞춤형 n-gram 분석기를 사용하므로 Und 접두어가 Understanding이라는 단어의 시작 부분과 성공적으로 매칭됩니다.
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "articles",
"_id": "1",
"_score": 0.2876821,
"_source": {
"title": "Understanding Multi-Fields in Search"
}
}
]
}
}