용어 벡터 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 권한이 있는지 확인하세요.

더 알아보기 (Learn more)