Field capabilities API
Field capabilities API
1.0에서 도입
_field_caps API는 하나 이상의 인덱스에 걸쳐 필드의 기능(capabilities)에 대한 정보를 제공해요. 보통 클라이언트가 필드가 어떻게 매핑되어 있는지, 그리고 여러 인덱스에서 검색·정렬·집계에 쓸 수 있는지 판단할 때 사용해요.
인덱스마다 매핑이 다르고, 쿼리가 인덱스 간 필드 호환성을 평가해야 할 때 특히 유용해요.
출처: 문서
본문
엔드포인트 (Endpoints)
GET /_field_caps
POST /_field_caps
GET /{index}/_field_caps
POST /{index}/_field_caps
경로 매개변수 (Path parameters)
다음 표는 사용 가능한 경로 매개변수예요.
| 매개변수 | 데이터 타입 | 설명 |
|---|---|---|
index |
List 또는 String | 요청을 제한하는 데 사용하는 데이터 스트림, 인덱스, 별칭의 쉼표로 구분된 목록이에요. 와일드카드(*)를 지원해요. 모든 데이터 스트림과 인덱스를 대상으로 하려면 이 매개변수를 생략하거나 * 또는 _all을 사용해요. 선택 사항이에요. |
쿼리 매개변수 (Query parameters)
다음 표는 사용 가능한 쿼리 매개변수예요. 모든 쿼리 매개변수는 선택 사항이에요.
| 매개변수 | 데이터 타입 | 설명 |
|---|---|---|
allow_no_indices |
Boolean | false면 와일드카드 표현식, 인덱스 별칭, _all 값이 존재하지 않거나 닫힌 인덱스만 대상으로 하면 오류를 반환해요. 요청이 다른 열린 인덱스도 대상으로 하더라도 마찬가지예요. 예를 들어 foo*,bar*를 대상으로 하는 요청은 foo로 시작하는 인덱스는 있지만 bar로 시작하는 인덱스가 없으면 오류를 반환해요. 기본값은 true예요. |
expand_wildcards |
List 또는 String | 와일드카드 패턴이 일치할 수 있는 인덱스 유형이에요. 요청이 데이터 스트림을 대상으로 할 수 있다면, 이 인수는 와일드카드 표현식이 숨은(hidden) 데이터 스트림과 일치하는지 결정해요. open,hidden 같은 쉼표로 구분된 값을 지원해요. |
| 유효한 값은 다음과 같아요: | ||
- all: 숨은 인덱스를 포함해 모든 인덱스와 일치해요. |
||
- closed: 닫힌, 숨지 않은 인덱스와 일치해요. |
||
- hidden: 숨은 인덱스와 일치해요. open, closed 또는 둘 다와 함께 사용해야 해요. |
||
- none: 와일드카드 표현식을 허용하지 않아요. |
||
- open: 열린, 숨지 않은 인덱스와 일치해요. |
||
기본값은 open이에요. |
||
fields |
List 또는 String | 기능을 조회할 필드의 쉼표로 구분된 목록이에요. 와일드카드(*) 표현식을 지원해요. |
ignore_unavailable |
Boolean | true면 존재하지 않거나 닫힌 인덱스가 응답에 포함되지 않아요. 기본값은 false예요. |
include_unmapped |
Boolean | true면 매핑되지 않은(unmapped) 필드가 응답에 포함돼요. 기본값은 false예요. |
요청 본문 필드 (Request body fields)
다음 표는 사용 가능한 요청 본문 필드예요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
index_filter |
Object | 요청에 포함할 인덱스를 필터링하는 데 사용하는 query DSL 객체예요. 예시: 인덱스 필터 사용하기를 참고해요. 선택 사항이에요. |
예시 요청 (Example requests)
같은 필드에 서로 다른 매핑을 가진 두 인덱스를 만들어요:
PUT /store-west
{
"mappings": {
"properties": {
"product": { "type": "text" },
"price": { "type": "float" }
}
}
}
PUT /store-east
{
"mappings": {
"properties": {
"product": { "type": "keyword" },
"price": { "type": "float" }
}
}
}
두 인덱스에 걸쳐 필드 기능을 조회해요:
GET /store-west,store-east/_field_caps?fields=product,price
Python 클라이언트로는 이렇게 호출해요:
response = client.field_caps(
index = "store-west,store-east",
params = { "fields": "product,price" },
body = { "Insert body here" }
)
예시 응답 (Example response)
응답은 사용 가능한 필드의 기능을 제공해요:
{
"indices": [
"store-east",
"store-west"
],
"fields": {
"product": {
"text": {
"type": "text",
"searchable": true,
"aggregatable": false,
"indices": [
"store-west"
]
},
"keyword": {
"type": "keyword",
"searchable": true,
"aggregatable": true,
"indices": [
"store-east"
]
}
},
"price": {
"float": {
"type": "float",
"searchable": true,
"aggregatable": true
}
}
}
}
예시: 인덱스 필터 사용하기 (Example: Using an index filter)
index_filter로 고려할 인덱스를 제한할 수 있어요. index_filter는 실제 문서 내용이 아니라 필드 수준 메타데이터를 기준으로 인덱스를 걸러내요. 다음 요청은 문서가 색인되어 있지 않아도 product 필드를 포함한 매핑이 있는 인덱스로 선택을 제한해요:
POST /_field_caps?fields=product,price
{
"index_filter": {
"term": {
"product": "notebook"
}
}
}
Python 클라이언트로는 이렇게 호출해요:
response = client.field_caps(
params = { "fields": "product,price" },
body = {
"index_filter": {
"term": {
"product": "notebook"
}
}
}
)
예시 응답 (Example response)
응답에는 값이 notebook인 product 필드를 가진 인덱스의 필드만 포함돼요:
{
"indices": [
"store-east",
"store-west"
],
"fields": {
"product": {
"text": {
"type": "text",
"searchable": true,
"aggregatable": false,
"indices": [
"store-west"
]
},
"keyword": {
"type": "keyword",
"searchable": true,
"aggregatable": true,
"indices": [
"store-east"
]
}
},
"price": {
"float": {
"type": "float",
"searchable": true,
"aggregatable": true
}
}
}
}
응답 본문 필드 (Response body fields)
다음 표는 모든 응답 본문 필드를 정리한 거예요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
indices |
List | 응답에 포함된 인덱스 목록이에요. |
fields |
Object | 타입을 필드 기능으로 매핑한 맵이에요. 각 키는 필드 이름이고 값은 객체예요. |
fields.<field>.<type>.type |
String | 필드의 데이터 타입이에요(예: float, text, keyword). |
fields.<field>.<type>.searchable |
Boolean | 필드가 색인되고 검색 가능한지 여부예요. |
fields.<field>.<type>.aggregatable |
Boolean | sum, terms 같은 집계에서 필드를 사용할 수 있는지 여부예요. |
fields.<field>.<type>.indices |
List | 해당 타입으로 필드가 나타나는 인덱스 목록이에요. |
fields.<field>.<type>.non_searchable_indices |
List 또는 null | 필드가 검색 불가능한 인덱스 목록이에요. null은 어떤 인덱스에서도 필드를 검색할 수 없다는 뜻이에요. |
fields.<field>.<type>.non_aggregatable_indices |
List 또는 null | 필드가 집계 불가능한 인덱스 목록이에요. null은 어떤 인덱스에서도 필드를 집계할 수 없다는 뜻이에요. |
fields.<field>.<type>.meta |
Object | 모든 매핑에서 병합된 메타데이터 값이에요. 키는 사용자 지정 메타데이터 키이고, 값은 인덱스 전체 값을 담은 배열이에요. |
필요한 권한 (Required permissions)
Security 플러그인을 사용한다면 적절한 권한이 있는지 확인해야 해요: indices:data/read/field_caps 및 indices:data/read/field_caps*.