네이버 클라우드 플랫폼의 상품 사용 방법을 보다 상세하게 제공하고, 다양한 API의 활용을 돕기 위해 [설명서][API 참조서]를 구분하여 제공하고 있습니다.

Cloud Search API 참조서 바로가기 >>
Cloud Search 설명서 바로가기 >>

INDEXER

Summary

  • 색인/삭제/업데이트 요청의 방법을 설명합니다.
  • 색인/삭제/업데이트는 REST API를 이용해서 실행할 수 있습니다.
  • 기본적으로 insert/upsert 요청은 기존에 문서가 존재하지 않거나 문서가 변경되거나, 사전이 변경되어서 색인이 변경되었을 경우에 색인 요청이 됩니다.
  • update_time을 명시한 경우에는 기존에 있는 문서의 update_time보다 같거나 최신일 경우에만 실제 변경이 승인됩니다.
  • 요청은 utf-8을 사용합니다.

REST API

  • 요청은 POST 메서드를 사용합니다.
  • 한 번의 요청에 하단에 정의된 insert/upsert/update/delete를 한꺼번에 요청할 수 있습니다.
  • 요청은 순차적으로 처리됩니다. (내부에서 primary key가 섞이지 않게 병행 처리)
  • API 사용 시 문서 size에는 제한이 없습니다.

JSON 요청 body

파라미터

필수 여부 사용 가능 값 설명
type 필수 insert, upsert, update, delete 요청이 어떤 타입인지 정의
update_time 선택.
생략 시 현재 시간 사용.
yymmddHHMMSS.ssssss(예: 170807133300.000000) 문서가 변경된 시간을 요청에 명시하는 것을 권장
force 선택.
생략 시 false.
bool 기색인된 문서와의 변경 및 update_time과 비교하지 않고 무조건 요청을 처리
force_hash 선택.
생략 시 false.
bool 기색인된 문서와의 변경은 무시하고 update_time만 비교해서 기존 문서 대비 update_time가 같거나 최신일 경우 요청 처리
key update, delete에서는 필수.
insert, upsert에서는 생략 시 content의 KEY값 사용.
string 문서의 primary key
content insert, upsert, update에서는 필수.
delete에서는 사용하지 않음.
map[string]string 요청에서 사용할 content를 정의

예시

예시에서 primary key는 KEY 섹션이며 KEY가 1인 요청은 순차적으로 처리되며 KEY가 1인 요청과 2인 요청은 서로 연관성이 없기 때문에 내부적으로 병렬 처리됩니다.

하나의 요청에 insert/upsert/delete/update 요청을 묶어서 보낼 수 있으며 요청 JSON의 requests[x].content의 key, value 쌍은 모두 문자열로 구성합니다. (검색 엔진에서 숫자형으로 사용할 경우 내부적으로 문자열에서 숫자형으로 변환됩니다.)

{
   "requests" : [
      {
         "type" : "insert",
         "key" : "1",
         "content" :
          {
            "KEY": "1",
            "URL": "http://naver.com/bbs/abc.php?bo_table=QnA&wr_id=321651",
            "ROOT_ID": "732303375144529937",
            "TITLE": "JSONJSONJSONJSONJSONJSONJSONJSON테스트중입니다.",
            "DATE": "2012-01-01T00:00:00+0900",
            "BODY_TEXT": "JSONJSONJSONJSONJSONJSONJSONJSON"
          }
      },
      {
         "type" : "update",
         "key" : "2",
         "content" :
          {
            "ROOT_ID": "223",
            "DATE": "2017-01-01T00:00:00+0900"
          }
      },
      {
         "type" : "delete",
         "key" : "3"
      }
  ]
}

JSON 응답 body

파라미터

데이터타입 설명
update_time string (yymmddHHMMSS.ssssss
예: 170807133300.000000)
indexer가 반환하는 update_time 값
total_document_count number 요청 안에 포함되어 있는 개별 요청 개수
status.code number 0: 성공
-1: 실패
status.message string 실패 시 에러 메시지

예시

{
  "update_time" : "170807133300.000000",
  "status" : {
      "code" : 0,
      "message" : ""
  },
  "total_document_count" : 100
}

{
  "update_time": "",
  "status": {
    "code": -1,
    "message": "not found content in request[0]"
  },
  "total_document_count": 0
}

insert 요청

문서가 존재하면 문서가 변경되었을 경우 색인 요청을 합니다. 문서가 존재하지 않으면 색인 요청을 합니다. 사전의 변경으로 인해 형태소 분석이 바뀌었거나 term/document weight이 변경되었을 때도 문서가 변경되었다고 판단됩니다.

색인 요청 시 정의된 전체 문서를 content에 제공하는 것이 원칙이지만 primary key로 정의된 key를 제외하고는 생략 시에는 빈 문자열이 사용됩니다.

primary key로 정의된 section은 content 안에 포함되어 있어야 합니다.

{
   "requests" : [
      {
         "type" : "insert",
         "key": "1",
         "content" :
          {
            "URL": "http://naver.com/bbs/abc.php?bo_table=QnA&wr_id=321651",
            "KEY": "1",
            "ROOT_ID": "732303375144529937",
            "TITLE": "JSONJSONJSONJSONJSONJSONJSONJSON테스트중입니다.",
            "DATE": "2012-01-01T00:00:00+0900",
            "BODY_TEXT": "JSONJSONJSONJSONJSONJSONJSONJSON"
          }
      }
  ]
}

upsert 요청

요청한 문서가 이미 존재하고 있다면 존재하는 문서와 요청 문서가 merge된 후에 insert와 동일하게 동작합니다. 요청한 문서가 새로운 문서이면 그냥 색인됩니다.

primary key는 별도의 key에 설정하거나 content 안에 반드시 포함되어 있어야 합니다.

{
   "requests" : [
      {
         "type" : "upsert",
         "key" : "1",
         "content" :
          {
            "URL": "http://naver.com/bbs/abc.php?bo_table=QnA&wr_id=321651",
            "KEY": "1",
            "ROOT_ID": "732303375144529937",
            "TITLE": "JSONJSONJSONJSONJSONJSONJSONJSON테스트중입니다.",
            "DATE": "2012-01-01T00:00:00+0900",
            "BODY_TEXT": "JSONJSONJSONJSONJSONJSONJSONJSON"
          }
      }
  ]
}

update 요청

기존에 존재하는 문서를 부분 업데이트합니다. 요청한 문서가 기존에 존재하지 않는다면 아무 일도 일어나지 않습니다.

{
   "requests" : [
      {
         "type" : "update",
         "key" : "2",
         "content" :
          {
            "ROOT_ID": "223",
            "DATE": "2017-01-01T00:00:00+0900"
          }
      }
  ]
}

delete 요청

요청한 문서를 삭제합니다. 요청한 문서가 존재하지 않는다면 아무 일도 일어나지 않습니다.

{
   "requests" : [
      {
         "type" : "delete",
         "key" : "2"
      }
  ]
}

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...