다중 용어 벡터 API
다중 용어 벡터 API (Multi Term Vectors API)
1.0에서 도입되었어요. _mtermvectors API는 하나의 요청으로 여러 문서의 용어 벡터(term vector) 정보를 가져와요. 용어 벡터는 문서 안의 용어(단어)에 대한 자세한 정보를 제공하는데, 용어 빈도(term frequency), 위치(position), 오프셋(offset), 페이로드(payload)가 포함돼요. 이는 관련성 점수 계산, 하이라이팅, 유사도 계산 같은 애플리케이션에 유용해요. 자세한 내용은 Term vector parameter를 참고하세요.
출처: 문서
본문
엔드포인트 (Endpoints)
GET /_mtermvectors
POST /_mtermvectors
GET /{index}/_mtermvectors
POST /{index}/_mtermvectors
경로 파라미터 (Path parameters)
다음 표는 사용 가능한 경로 파라미터를 보여줘요. 모든 경로 파라미터는 선택 사항이에요.
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
| index | String | 문서를 담고 있는 인덱스의 이름이에요. |
쿼리 파라미터 (Query parameters)
다음 표는 사용 가능한 쿼리 파라미터를 보여줘요. 모든 쿼리 파라미터는 선택 사항이에요.
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
| field_statistics | Boolean | true이면 응답에 문서 개수, 문서 빈도의 합, 전체 용어 빈도의 합이 포함돼요. (기본값: true) |
| fields | List 또는 String | 통계에 포함할 필드를 지정하는 쉼표 구분 목록 또는 와일드카드 표현이에요. completion_fields나 fielddata_fields 파라미터에 특정 필드 목록이 제공되지 않으면 기본 목록으로 사용돼요. |
| ids | List | 쉼표로 구분된 문서 ID 목록이에요. 요청 본문의 docs 필드 또는 쿼리 파라미터나 요청 본문의 ids를 반드시 제공해야 해요. |
| offsets | Boolean | true이면 응답에 용어 오프셋이 포함돼요. (기본값: true) |
| payloads | Boolean | true이면 응답에 용어 페이로드가 포함돼요. (기본값: true) |
| positions | Boolean | true이면 응답에 용어 위치가 포함돼요. (기본값: true) |
| preference | String | 작업을 수행할 노드나 샤드를 지정해요. 사용 가능한 옵션 목록은 preference 쿼리 파라미터를 참고하세요. 기본적으로 요청은 사용 가능한 샤드 복사본(프라이머리 또는 복제본)에 무작위로 라우팅되며, 반복 쿼리 간 일관성이 보장되지 않아요. |
| realtime | Boolean | true이면 요청이 near real time이 아닌 real time이에요. (기본값: true) |
| routing | List 또는 String | 작업을 특정 샤드로 라우팅하는 데 사용하는 사용자 지정 값이에요. |
| term_statistics | Boolean | true이면 응답에 용어 빈도와 문서 빈도가 포함돼요. (기본값: false) |
| version | Integer | true이면 hit의 일부로 문서 버전을 반환해요. |
| version_type | String | 특정 버전 유형이에요. 유효한 값은 다음과 같아요. - external : 버전 번호가 현재 버전보다 커야 해요. - external_gte : 버전 번호가 현재 버전보다 크거나 같아야 해요. - internal : 버전 번호가 OpenSearch 내부에서 관리돼요. |
요청 본문 필드 (Request body fields)
다음 표는 요청 본문에 지정할 수 있는 필드를 보여줘요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| docs | Array | 문서 사양의 배열이에요. |
| ids | Array of strings | 가져올 문서 ID 목록이에요. 모든 문서가 요청 경로나 쿼리에 지정된 같은 인덱스를 공유할 때만 사용해요. |
| fields | Array of strings | 용어 벡터를 반환할 필드 이름 목록이에요. |
| offsets | Boolean | true이면 응답이 각 용어의 문자 오프셋을 포함해요. (기본값: true) |
| payloads | Boolean | true이면 응답이 각 용어의 페이로드를 포함해요. (기본값: true) |
| positions | Boolean | true이면 응답이 토큰 위치를 포함해요. (기본값: true) |
| field_statistics | Boolean | true이면 응답이 문서 개수, 문서 빈도의 합, 전체 용어 빈도의 합 같은 통계를 포함해요. (기본값: true) |
| term_statistics | Boolean | true이면 응답이 용어 빈도와 문서 빈도를 포함해요. (기본값: false) |
| routing | String | 샤드를 식별하는 데 사용하는 사용자 지정 라우팅 값이에요. 인덱싱 중에 사용자 지정 라우팅을 사용했다면 필수예요. |
| version | Integer | 가져올 문서의 특정 버전이에요. |
| version_type | String | 사용할 버전 관리 유형이에요. 유효한 값: internal, external, external_gte. |
| filter | Object | 응답에 반환되는 토큰을 필터링해요(예: 빈도나 위치 기준). 지원되는 필드는 용어 필터링을 참고하세요. |
| per_field_analyzer | Object | 필드별로 사용할 사용자 지정 분석기를 지정해요. 형식: { "field_name": "analyzer_name" }. |
용어 필터링 (Filtering terms)
요청 본문의 filter 객체로 용어 벡터 응답에 포함할 토큰을 필터링할 수 있어요. filter 객체는 다음 필드를 지원해요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| max_num_terms | Integer | 반환할 최대 용어 수예요. |
| min_term_freq | Integer | 용어가 포함되기 위해 문서에서 필요한 최소 용어 빈도예요. |
| max_term_freq | Integer | 용어가 포함되기 위해 문서에서 필요한 최대 용어 빈도예요. |
| min_doc_freq | Integer | 용어가 포함되기 위해 인덱스 전체에서 필요한 최소 문서 빈도예요. |
| max_doc_freq | Integer | 용어가 포함되기 위해 인덱스 전체에서 필요한 최대 문서 빈도예요. |
| min_word_length | Integer | 포함될 용어의 최소 길이예요. |
| max_word_length | Integer | 포함될 용어의 최대 길이예요. |
예제 요청 (Example requests)
용어 벡터를 활성화한 인덱스를 만들어요.
PUT /my-index
{
"mappings": {
"properties": {
"text": {
"type": "text",
"term_vector": "with_positions_offsets_payloads"
}
}
}
}
첫 번째 문서를 인덱싱해요.
두 번째 문서를 인덱싱해요.
예제 요청 (Example request)
여러 문서의 용어 벡터를 가져와요.
또는 ids와 fields를 쿼리 파라미터로 지정할 수도 있어요.
docs를 지정하는 대신 ids 배열에 문서 ID를 제공할 수도 있어요.
예제 응답 (Example response)
응답에는 두 문서에 대한 용어 벡터 정보가 들어 있어요.
{
"docs": [
{
"_index": "my-index",
"_id": "1",
"_version": 1,
"found": true,
"took": 10,
"term_vectors": {
"text": {
"field_statistics": {
"sum_doc_freq": 9,
"doc_count": 2,
"sum_ttf": 9
},
"terms": {
"a": {
"term_freq": 1,
"tokens": [
{
"position": 2,
"start_offset": 14,
"end_offset": 15
}
]
},
"engine": {
"term_freq": 1,
"tokens": [
{
"position": 4,
"start_offset": 23,
"end_offset": 29
}
]
},
"is": {
"term_freq": 1,
"tokens": [
{
"position": 1,
"start_offset": 11,
"end_offset": 13
}
]
},
"opensearch": {
"term_freq": 1,
"tokens": [
{
"position": 0,
"start_offset": 0,
"end_offset": 10
}
]
},
"search": {
"term_freq": 1,
"tokens": [
{
"position": 3,
"start_offset": 16,
"end_offset": 22
}
]
}
}
}
}
},
{
"_index": "my-index",
"_id": "2",
"_version": 1,
"found": true,
"took": 0,
"term_vectors": {
"text": {
"field_statistics": {
"sum_doc_freq": 9,
"doc_count": 2,
"sum_ttf": 9
},
"terms": {
"features": {
"term_freq": 1,
"tokens": [
{
"position": 3,
"start_offset": 29,
"end_offset": 37
}
]
},
"opensearch": {
"term_freq": 1,
"tokens": [
{
"position": 0,
"start_offset": 0,
"end_offset": 10
}
]
},
"powerful": {
"term_freq": 1,
"tokens": [
{
"position": 2,
"start_offset": 20,
"end_offset": 28
}
]
},
"provides": {
"term_freq": 1,
"tokens": [
{
"position": 1,
"start_offset": 11,
"end_offset": 19
}
]
}
}
}
}
}
]
}
응답 본문 필드 (Response body fields)
다음 표는 모든 응답 본문 필드를 보여줘요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| docs | Array | 용어 벡터를 포함하는 요청된 문서 목록이에요. |
docs 배열의 각 요소는 다음 필드를 포함해요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| term_vectors | Object | 각 필드의 용어 벡터 데이터를 포함해요. |
| term_vectors.<field>.field_statistics | Object | 필드에 대한 통계를 포함해요. |
| term_vectors.<field>.field_statistics.doc_count | Integer | 지정된 필드에 용어를 하나 이상 포함하는 문서 수예요. |
| term_vectors.<field>.field_statistics.sum_doc_freq | Integer | 필드의 모든 용어에 대한 문서 빈도의 합이에요. |
| term_vectors.<field>.field_statistics.sum_ttf | Integer | 필드의 모든 용어에 대한 전체 용어 빈도의 합이에요. |
| term_vectors.<field>.terms | Object | 필드의 용어 맵이에요. 각 용어는 빈도(term_freq)와 관련 토큰 정보를 포함해요. |
| term_vectors.<field>.terms.<term>.tokens | Array | 각 용어의 토큰 객체 배열이에요. 텍스트에서 토큰의 위치와 문자 오프셋(start_offset, end_offset)을 포함해요. |
필요한 권한 (Required permissions)
Security plugin을 사용한다면 indices:data/read/mtv 및 indices:data/read/mtv* 권한이 있는지 확인하세요.