まずAutocompleteサービスを有効化します。
NHN Cloud Consoleでサービス選択をクリックします。
Autocompleteをクリックします。
サービスが有効になっているかを確認する方法は次のとおりです。
NHN Cloud Console左側のメニューでSearchをクリックします。
Autocompleteが表示されていれば、サービスが有効になっているということです。
サービス作成ボタンをクリックします。
サービス作成ウィンドウでサービスIDを入力します。
保存ボタンをクリックします。
作成されたサービス結果を確認します。
1. 作成されたサービスID(test)をクリックします。
インデックスするファイルを作成してインデックスする方法は次のとおりです。
インデックスファイルの作成
[
{
"input": "ナイキ",
"weight": 3
},
{
"input": "ナイキ運動靴",
"weight": 2
},
{
"input": "運動靴",
"weight": 1
}
]
インデックス方法
インデックスタブをクリックします。
ファイル選択ボタンをクリックします。
インデックスするファイルを選択します。
開くボタンをクリックします。
インデックスコマンドがREST APIで出力されます。
インデックスボタンをクリックします。
更新ボタンをクリックします。
インデックス結果を確認します。
インデックスの注意事項
インデックスをリクエストすると、既存のデータはすべて削除され、新規データに変更されます。
REST API
インデックスAPI
Request
ファイルアップロード方式
curl -XPOST 'https://kr1-autocomplete.api.nhncloudservice.com/indexing/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/indexing?split=true&koreng=true&chosung=false' -H 'Accept-Language:ja' -H 'Content-Type:multipart/form-data; charset=UTF-8' -F 'file=@documents.json'
Payload方式
curl -i -XPOST 'https://kr1-autocomplete.api.nhncloudservice.com/indexing/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/indexing?split=true&koreng=true&chosung=false' -H 'Accept-Language:ja' -H 'Content-Type:application/json; charset=UTF-8' -d '
[
{
"input": "ナイキ",
"weight": 3
},
{
"input": "ナイキ 運動靴",
"weight": 2
},
{
"input": "運動靴",
"weight": 1
}
]'
Response
{
"id" : 1
}
インデックス結果確認API
Request
curl -i -XGET 'https://kr1-autocomplete.api.nhncloudservice.com/indexing/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/indexing_log?id=1' -H 'Accept-Language:ja'
Response
{
"request_time" : "2017-10-23T12:36:43",
"file_name" : "documents.json",
"file_size" : 114,
"status" : 4
}
オートコンプリート方法
オートコンプリートタブをクリックします。
検索する単語を入力します。
出力数を指定します。
オートコンプリートREST APIです。
オートコンプリート結果が出力されます。
REST API
Request
curl -G -XGET 'https://kr1-autocomplete.api.nhncloudservice.com/autocomplete/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/autocomplete?count=10' -H 'Accept-Language:ja' --data-urlencode query='ナ'
Response
{
"collections" : [
{
"index" : 0,
"items" : [
[
"ナイキ"
],
[
"ナイキ 運動靴"
]
],
"title" : ""
}
],
"query" : [
"ナ"
],
"ver" : "2.0"
}
インデックス およびオートコンプリートREST APIを呼び出すことができる端末のIPを制限できます。 コンソールでテストする場合、ACL設定と関係ありません。
ACLの設定方法
ACLタブをクリックします。
インデックスをリクエストするIPアドレスが202.179.177.21の場合のみインデックスができるように設定した例です。
オートコンプリートリクエストは、すべてのIPからできるように設定した例です。
保存ボタンをクリックします。
インデックス
テストを行うためにデータをインデックスします。
[
{
"input": "ナイキ運動靴",
"weight": 2
},
{
"input": "アディダス 運動靴",
"weight": 1
}
]
インデックスする時、中間マッチングを選択します。
オートコンプリート
運動を入力します。
中間に運動があるナイキ運動靴が出力されます。
インデックス
テストを行うためにデータをインデックスします。
[
{
"input": "ナイキ",
"payload": [
"https://image.nhnent.com/images/nike.jpg",
"ブランド > スポーツ"
],
"weight": 2
},
{
"input": "アディダス",
"payload": [
"https://image.nhnent.com/images/adidas.jpg",
"ブランド > スポーツ"
],
"weight": 1
}
]
ペイロード(payload)に出力したい付加情報を入力します。
オートコンプリート
インデックス
テストを行うためにデータをインデックスします。
[
{
"input": "ナイキ",
"output": "Nike",
"weight": 2
},
{
"input": "アディダス",
"output": "Adidas",
"weight": 1
}
]
オートコンプリート
「ナ」を入力します。
「Nike」が出力されます。
2個以上のサービスのオートコンプリート結果を1回のオートコンプリートAPIリクエストで出力する機能です。例えば、ブランドとカテゴリーのオートコンプリートを1回のAPIリクエストで出力する時に使用します。
ブランドサービスの作成
サービス作成ボタンをクリックした後、サービス作成ウィンドウでIDを入力し、作成ボタンをクリックします。
ブランドインデックス
テストを行うためにデータをインデックスします。
[
{
"input": "ナイキ",
"weight": 2
},
{
"input": "アディダス",
"weight": 1
}
]
カテゴリーサービスの作成
サービス作成ボタンをクリックした後、サービス作成ウィンドウでIDを入力し、作成ボタンをクリックします。
カテゴリーインデックス
テストを行うためにデータをインデックスします。
[
{
"input": "メンズバッグ",
"weight": 2
},
{
"input": "アウター",
"weight": 1
}
]
オートコンプリート
Request
API呼び出し時、「serviceids/brand,category」にリクエストしました。
curl -G -XGET 'https://kr1-autocomplete.api.nhncloudservice.com/autocomplete/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/brand,category/autocomplete?count=10' -H 'Accept-Language:ja' --data-urlencode query='ア'
- Response
APIレスポンスにindex 0はbrand、index 1はcategoryオートコンプリート結果が出力されます。
curl -G -XGET 'https://kr1-autocomplete.api.nhncloudservice.com/autocomplete/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/brand,category/autocomplete?count=10' -H 'Accept-Language:ja' --data-urlencode query='ア'
{
"collections" : [
{
"index" : 0,
"items" : [
[
"アディダス"
]
],
"title" : ""
},
{
"index" : 1,
"items" : [
[
"アウター"
]
],
"title" : ""
}
],
"query" : [
"ア"
],
"ver" : "2.0"
}
基本インデックスは、入力できるデータサイズが10MBに制限されています。 10MBを超えるデータを入力する時はFull indexing APIを使用します。
curl -i -XPOST 'https://kr1-autocomplete.api.nhncloudservice.com/indexing/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/indexing/full/begin'
curl -XPOST 'https://kr1-autocomplete.api.nhncloudservice.com/indexing/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/indexing/full?split=true&koreng=true&chosung=true' -H 'Content-Type:multipart/form-data; charset=UTF-8' -F 'file=@documents-001.json'
curl -i -XPOST 'https://kr1-autocomplete.api.nhncloudservice.com/indexing/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/indexing/full/end'
curl -i -XPOST 'https://kr1-autocomplete.api.nhncloudservice.com/indexing/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/indexing/full/cancel'
データを追加/修正/削除する時はIncremental indexing APIを使用します。
1. テスト用のデータを入力
curl -XPOST 'https://kr1-autocomplete.api.nhncloudservice.com/indexing/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/indexing?split=true&koreng=true&chosung=false' -H 'Accept-Language:ja' -H 'Content-Type:application/json; charset=UTF-8' -d '
[
{
"id": "id-1",
"input": "ナイキ 靴",
"weight": 1
},
{
"id": "id-2",
"input": "アディダス 靴",
"weight": 1
}
]'
2. Incremental indexing
curl -XPOST 'https://kr1-autocomplete.api.nhncloudservice.com/indexing/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/indexing/incremental?split=true&koreng=true&chosung=false' -H 'Accept-Language:ja' -H 'Content-Type:application/json; charset=UTF-8' -d '
[
{
"id": "id-1",
"action": "add",
"input": "ナイキ 運動靴",
"weight": 1
},
{
"id": "id-2",
"action": "delete"
},
{
"id": "id-3",
"action": "add",
"input": "ニューバランス 運動靴",
"weight": 1
}
]'
インデックスファイルが下記のような場合、ユーザーが「ナ」を入力すると「スニーカー」、「スイッチ」、「スマホケース」の順に出力されます。
[
{
"input": "スニーカー",
"weight": 3
},
{
"input": "スイッチ",
"weight": 2
},
{
"input": "スマホケース",
"weight": 1
}
]
ACLの設定画面は次のとおりです。
入力形式
次はファイルアップロード方式のインデックスサンプルコードです。
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.6'
compile group: 'org.apache.httpcomponents', name: 'httpmime', version: '4.5.6'
package com.toast.cloud.autocomplete.client;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
public class IndexingClient {
public static void main(String[] args) throws IOException {
String documents = ""
+ "[\n"
+ " {\n"
+ " \"input\": \"ナイキ\",\n"
+ " \"weight\": 3\n"
+ " }\n"
+ "]\n";
File tempFile = File.createTempFile("documents-",".json", new File("/tmp/"));
tempFile.deleteOnExit();
PrintWriter printWriter = new PrintWriter(tempFile);
printWriter.println(documents);
printWriter.close();
try (CloseableHttpClient httpclient = HttpClients.createDefault()) {
// build multipart upload request.
HttpEntity data = MultipartEntityBuilder.create()
.setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
.addBinaryBody("file", tempFile, ContentType.DEFAULT_BINARY, tempFile.getName())
.build();
// build http request and assign multipart upload data.
HttpUriRequest request = RequestBuilder
.post("https://kr1-autocomplete.api.nhncloudservice.com/indexing/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/indexing?split=true&koreng=true&chosung=false")
.setEntity(data)
.build();
System.out.println("Executing request " + request.getRequestLine());
// Create a custom response handler.
ResponseHandler<String> responseHandler = response -> {
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
HttpEntity entity = response.getEntity();
return entity != null ? EntityUtils.toString(entity) : null;
} else {
throw new ClientProtocolException("Unexpected response status: " + status);
}
};
String responseBody = httpclient.execute(request, responseHandler);
System.out.println(responseBody);
}
}
}
<?php
$documents = ""
. "[\n"
. " {\n"
. " \"input\": \"ナイキ\",\n"
. " \"weight\": 3\n"
. " }\n"
. "]\n";
$file = DIRECTORY_SEPARATOR.trim(sys_get_temp_dir(), DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.ltrim("documents.json", DIRECTORY_SEPARATOR);
file_put_contents($file, $documents);
register_shutdown_function(function() use($file) {
unlink($file);
});
$data = array(
'file' => curl_file_create($file, "application/json", basename($file))
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://kr1-autocomplete.api.nhncloudservice.com/indexing/v2.0/appkeys/PyVTgcSXJpA3e5U7/serviceids/test/indexing?split=true&koreng=true&chosung=false");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:multipart/form-data; charset=UTF-8"));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$response = curl_exec($ch) or die(curl_error($ch));
print_r($response);
curl_close($ch);
?>