Este tema proporciona código de ejemplo en Go para enviar datos de comportamiento a una aplicación de OpenSearch Industry Algorithm Edition. Los datos de comportamiento, como clics, compras, favoritos y otras acciones similares del usuario, alimentan el motor de recomendaciones y mejoran la relevancia de los resultados con el tiempo.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una aplicación de OpenSearch Industry Algorithm Edition.
Un par de AccessKey. Utilice el par de AccessKey de un usuario de Resource Access Management (RAM) en lugar del par de AccessKey de su cuenta de Alibaba Cloud. Para obtener más información, consulte Create a RAM user y Create an AccessKey pair.
Los permisos necesarios otorgados al rol
AliyunServiceRoleForOpenSearch. Para obtener más información, consulte AliyunServiceRoleForOpenSearch y Access authorization rules.
Configurar variables de entorno
Establezca su par de AccessKey como variables de entorno para que el código de ejemplo pueda leerlas durante la ejecución. Nunca codifique las credenciales directamente en los archivos fuente.
-
Linux y macOS: Ejecute los siguientes comandos. Reemplace
<access_key_id>y<access_key_secret>con el AccessKey ID y el AccessKey secret de su usuario de RAM.export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret> Windows: Cree un archivo de variables de entorno, agregue
ALIBABA_CLOUD_ACCESS_KEY_IDyALIBABA_CLOUD_ACCESS_KEY_SECRET, y establezca sus valores con su AccessKey ID y AccessKey secret. Reinicie Windows para que las variables surtan efecto.
Campos de comportamiento
Cada solicitud de envío incluye uno o más documentos de comportamiento. Cada documento contiene un objeto fields con los datos de comportamiento.
Campos obligatorios
A continuación se muestran los campos obligatorios para todos los tipos de comportamiento.
|
Field |
Description |
|
|
La clave principal del elemento devuelto en los resultados de búsqueda. |
|
|
El ID único del usuario. Para usuarios con sesión iniciada, utilice el ID de usuario. Para usuarios anónimos en clientes de PC, utilice el ID de cookie. |
|
|
El tipo de comportamiento. |
|
|
La hora en que el servidor recibe los datos, como una marca de tiempo UNIX precisa al segundo. |
|
|
El valor de |
|
|
El ID de solicitud devuelto en los resultados de búsqueda. |
|
|
El ID numérico que diferencia las líneas de negocio en clientes móviles o de aplicación. Asocia los datos con aplicaciones de OpenSearch e instancias de Artificial Intelligence Recommendation (AIRec). |
|
|
Establézcalo en |
|
|
El número de versión del SDK de OpenSearch para Go. |
|
|
Establézcalo en |
|
|
Establézcalo en |
Campos condicionales
A continuación se muestran los campos obligatorios únicamente cuando bhv_type es like, comment o buy.
|
Field |
Description |
|
|
Una descripción del comportamiento. Formato: |
|
|
Información numérica sobre el comportamiento, como la duración de la estancia o la cantidad de artículos comprados. |
Tipos de comportamiento {#behavior-types}
|
Value |
Description |
Requires conditional fields |
|
|
El usuario hace clic en un elemento o lo visualiza. |
No |
|
|
El usuario agrega un elemento al carrito de compras. |
No |
|
|
El usuario agrega un elemento a favoritos. |
No |
|
|
Al usuario le gusta un elemento. |
Sí |
|
|
El usuario publica un comentario sobre un elemento. |
Sí |
|
|
El usuario compra un elemento. |
Sí |
Código de ejemplo
El código de ejemplo crea un cliente del SDK, construye un documento de comportamiento y lo envía al endpoint de envío masivo de OpenSearch mediante una solicitud POST.
// This file is auto-generated, don't edit it. Thanks.
package main
import (
"fmt"
util "github.com/alibabacloud-go/tea-utils/service"
"github.com/alibabacloud-go/tea/tea"
opensearch "main/client"
)
func main() {
// Configure the client with your endpoint and credentials from environment variables.
// endpoint: the OpenSearch API endpoint for your region.
config := &opensearch.Config{
Endpoint: tea.String("<Endpoint>"),
// Read credentials from environment variables set in the "Configure environment variables" section.
AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
}
client, _clientErr := opensearch.NewClient(config)
if _clientErr != nil {
fmt.Println(_clientErr)
return
}
// item_id: the primary key of the item returned in search results.
itemId := "<item_id>"
// trace_info: the ops_request_misc value returned in search results.
opsRequestMisc := "<ops_request_misc>"
// bhv_type: the behavior type. Valid values: cart, collect, like, comment, buy, click.
bhvType := "<bhv_type>"
// rn: the request ID returned in search results.
requestId := "<request_id>"
// reach_time: UNIX timestamp (seconds) when the server receives the data.
reachTime := "<reach_time>"
// user_id: the unique ID of the user.
// For logged-in users, use the user ID. For anonymous PC users, use the cookie ID.
user_id := "<user_id>"
behavior_fields := map[string]interface{}{
"item_id": itemId,
"sdk_type": "opensearch_sdk",
"sdk_version": "<sdk_version>", // OpenSearch SDK for Go version number.
"trace_id": "ALIBABA", // Service provider identifier.
"trace_info": opsRequestMisc,
"bhv_type": bhvType,
"item_type": "item",
"rn": requestId,
"biz_id": "<biz_id>", // Numeric business ID for mobile or application clients.
"reach_time": reachTime,
"user_id": user_id,
}
// For like, comment, and buy behaviors, include bhv_detail and bhv_value.
bhv_actions := []string{"like", "comment", "buy"}
if IsContain(bhv_actions, bhvType) {
behavior_fields["bhv_detail"] = "<bhv_detail>" // Format: key=value{,key=value}
behavior_fields["bhv_value"] = "<bhv_value>" // Numerical behavior info, e.g. purchase quantity.
}
behavior_document := map[string]interface{}{
"cmd": "ADD",
"fields": behavior_fields,
}
requestBody := []interface{}{behavior_document}
// Specify the parameters that are used to configure the request and connection pool.
runtime := &util.RuntimeOptions{
ConnectTimeout: tea.Int(5000),
ReadTimeout: tea.Int(10000),
Autoretry: tea.Bool(false),
IgnoreSSL: tea.Bool(false),
MaxIdleConns: tea.Int(50),
}
// appName: the name of the OpenSearch application (not the version name).
// dataCollectionName: the name of the data collection in the application.
appName := "<appName>"
dataCollectionName := "<dataCollectionName>"
// dataCollectionType: set to BEHAVIOR for behavioral data.
dataCollectionType := "BEHAVIOR"
_response, _request_err := client.Request(
tea.String("POST"),
tea.String("/v3/openapi/app-groups/"+appName+"/data-collections/"+dataCollectionName+"/data-collection-type/"+dataCollectionType+"/actions/bulk"),
nil,
nil,
requestBody,
runtime)
if _request_err != nil {
fmt.Println(_request_err)
return
}
fmt.Println(_response)
}
func IsContain(items []string, item string) bool {
for _, eachItem := range items {
if eachItem == item {
return true
}
}
return false
}