용어 벡터 API
용어 벡터 API (Term Vectors API)
1.0에서 도입되었어요. _termvectors API는 단일 문서의 용어 벡터(term vector) 정보를 가져와요. 용어 벡터는 문서 안의 용어(단어)에 대한 자세한 정보를 제공하는데, 용어 빈도(term frequency), 위치(position), 오프셋(offset), 페이로드(payload)가 포함돼요. 이는 관련성 점수 계산, 하이라이팅, 유사도 계산 같은 애플리케이션에 유용해요. 자세한 내용은 Term vector parameter를 참고하세요.
출처: 문서
본문
엔드포인트 (Endpoints)
GET /{index}/_termvectors
POST /{index}/_termvectors
GET /{index}/_termvectors/{id}
POST /{index}/_termvectors/{id}
경로 파라미터 (Path parameters)
다음 표는 사용 가능한 경로 파라미터를 보여줘요.
| 파라미터 | 필수 | 데이터 타입 | 설명 |
|---|---|---|---|
| index | 필수 | String | 문서를 담고 있는 인덱스의 이름이에요. |
| id | 선택 | String | 문서의 고유 식별자예요. |
쿼리 파라미터 (Query parameters)
다음 표는 사용 가능한 쿼리 파라미터를 보여줘요. 모든 쿼리 파라미터는 선택 사항이에요.
| 파라미터 | 데이터 타입 | 설명 |
|---|---|---|
| field_statistics | Boolean | true이면 응답에 문서 개수, 문서 빈도의 합, 전체 용어 빈도의 합이 포함돼요. (기본값: true) |
| fields | List 또는 String | 통계에 포함할 필드를 지정하는 쉼표 구분 목록 또는 와일드카드 표현이에요. completion_fields나 fielddata_fields 파라미터에 특정 필드 목록이 제공되지 않으면 기본 목록으로 사용돼요. |
| 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 : 버전 번호가 현재 버전보다 크거나 같아야 해요. - force : 버전 번호가 주어진 값으로 강제 설정돼요. - internal : 버전 번호가 OpenSearch 내부에서 관리돼요. |
요청 본문 필드 (Request body fields)
다음 표는 요청 본문에 지정할 수 있는 필드를 보여줘요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| doc | Object | 분석할 문서예요. 제공하면 API가 인덱스에서 기존 문서를 가져오지 않고 제공된 콘텐츠를 사용해요. |
| 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, force. |
| filter | Object | 응답에 반환되는 토큰을 필터링할 수 있게 해줘요(예: 빈도나 위치 기준). 사용 가능한 옵션은 용어 필터링을 참고하세요. |
| per_field_analyzer | Object | 필드별로 사용할 사용자 지정 분석기를 지정해요. 형식: { "field_name": "analyzer_name" }. |
| preference | String | 샤드나 노드 라우팅 선호도를 지정해요. preference 쿼리 파라미터를 참고하세요. |
용어 필터링 (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)
용어 벡터를 가져와요.
또는 fields와 term_statistics를 쿼리 파라미터로 제공할 수도 있어요.
예제 응답 (Example response)
응답은 용어 벡터 정보를 보여줘요.
{
"_index": "my-index",
"_id": "1",
"_version": 1,
"found": true,
"took": 1,
"term_vectors": {
"text": {
"field_statistics": {
"sum_doc_freq": 5,
"doc_count": 1,
"sum_ttf": 5
},
"terms": {
"a": {
"doc_freq": 1,
"ttf": 1,
"term_freq": 1,
"tokens": [
{
"position": 2,
"start_offset": 14,
"end_offset": 15
}
]
},
"engine": {
"doc_freq": 1,
"ttf": 1,
"term_freq": 1,
"tokens": [
{
"position": 4,
"start_offset": 23,
"end_offset": 29
}
]
},
"is": {
"doc_freq": 1,
"ttf": 1,
"term_freq": 1,
"tokens": [
{
"position": 1,
"start_offset": 11,
"end_offset": 13
}
]
},
"opensearch": {
"doc_freq": 1,
"ttf": 1,
"term_freq": 1,
"tokens": [
{
"position": 0,
"start_offset": 0,
"end_offset": 10
}
]
},
"search": {
"doc_freq": 1,
"ttf": 1,
"term_freq": 1,
"tokens": [
{
"position": 3,
"start_offset": 16,
"end_offset": 22
}
]
}
}
}
}
}
응답 본문 필드 (Response body fields)
다음 표는 모든 응답 본문 필드를 보여줘요.
| 필드 | 데이터 타입 | 설명 |
|---|---|---|
| term_vectors | Object | 각 지정된 필드의 용어 벡터 데이터를 포함해요. |
| term_vectors.text | Object | text 필드의 용어 벡터 세부 정보를 포함해요. |
| term_vectors.text.field_statistics | Object | 전체 필드에 대한 통계를 포함해요. field_statistics가 true일 때만 존재해요. |
| term_vectors.text.field_statistics.doc_count | Integer | 지정된 필드에 용어를 하나 이상 포함하는 문서 수예요. |
| term_vectors.text.field_statistics.sum_doc_freq | Integer | 필드의 모든 용어에 대한 문서 빈도의 합이에요. |
| term_vectors.text.field_statistics.sum_ttf | Integer | 필드의 모든 용어에 대한 전체 용어 빈도(반복 포함)의 합이에요. |
| term_vectors.text.terms | Object | 각 키가 용어이고 각 값이 해당 용어에 대한 세부 정보를 포함하는 맵이에요. |
| term_vectors.text.terms.<term>.term_freq | Integer | 문서에서 용어가 나타나는 횟수예요. |
| term_vectors.text.terms.<term>.doc_freq | Integer | 용어를 포함하는 문서 수예요. term_statistics가 true일 때만 존재해요. |
| term_vectors.text.terms.<term>.ttf | Integer | 모든 문서에서의 전체 용어 빈도예요. term_statistics가 true일 때만 존재해요. |
| term_vectors.text.terms.<term>.tokens | Array | 개별 용어 인스턴스에 대한 정보를 제공하는 토큰 객체 목록이에요. |
| term_vectors.text.terms.<term>.tokens[].position | Integer | 텍스트 안에서 토큰의 위치예요. positions가 true일 때만 존재해요. |
| term_vectors.text.terms.<term>.tokens[].start_offset | Integer | 토큰의 시작 문자 오프셋이에요. offsets가 true일 때만 존재해요. |
| term_vectors.text.terms.<term>.tokens[].end_offset | Integer | 토큰의 끝 문자 오프셋이에요. offsets가 true일 때만 존재해요. |
| term_vectors.text.terms.<term>.tokens[].payload | String (Base64) | 토큰과 연결된 선택 페이로드 데이터예요. payloads가 true이고 사용 가능할 때만 존재해요. |
필요한 권한 (Required permissions)
Security plugin을 사용한다면 indices:data/read/tv 권한이 있는지 확인하세요.