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