Dorong event perilaku pengguna—seperti klik, pembelian, penambahan ke keranjang belanja, dan lainnya—ke OpenSearch agar mesin peringkat dapat belajar dari pola penggunaan nyata dan meningkatkan relevansi pencarian seiring waktu.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membuat aplikasi OpenSearch Edisi Algoritma Industri di Akun Alibaba Cloud Anda.
Memiliki Pengguna Resource Access Management (RAM) dengan izin yang diperlukan. Pasangan Kunci Akses (AccessKey pair) dari Akun Alibaba Cloud memberikan akses ke semua Operasi API, sehingga disarankan menggunakan Pengguna RAM untuk panggilan API serta operasi dan pemeliharaan (O&M) rutin. Lihat Create a RAM user untuk memulai, lalu tinjau Access authorization rules guna memberikan izin yang tepat.
Memiliki ID AccessKey dan Rahasia AccessKey dari Pengguna RAM tersebut. Lihat Create an AccessKey pair.
(Opsional) Memiliki Token Layanan Keamanan (STS) jika Anda menggunakan autentikasi RAM dan STS. Panggil operasi AssumeRole untuk mendapatkannya.
Jangan pernah menyertakan Pasangan Kunci Akses (AccessKey pair) Anda secara langsung dalam kode proyek. Simpan kredensial dalam variabel lingkungan untuk menghindari pengeksposan.
Siapkan variabel lingkungan
Tetapkan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET sebelum menjalankan kode contoh.
Linux dan macOS
Ganti <access_key_id> dan <access_key_secret> dengan ID AccessKey dan Rahasia AccessKey Pengguna RAM Anda.
export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id>
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>Windows
Buat file variabel lingkungan dan tambahkan
ALIBABA_CLOUD_ACCESS_KEY_IDdanALIBABA_CLOUD_ACCESS_KEY_SECRETbeserta nilainya.Mulai ulang Windows agar perubahan diterapkan.
Instal dependensi
pip install alibabacloud_tea_util
pip install alibabacloud_opensearch_util
pip install alibabacloud_credentialsKode contoh
Kode berikut mendorong event perilaku ke OpenSearch menggunakan metode behaviorBulk, yang mengirim permintaan POST ke titik akhir data perilaku bulk.
# -*- coding: utf-8 -*-
import time, os
from typing import Dict, Any
from Tea.exceptions import TeaException
from Tea.request import TeaRequest
from alibabacloud_tea_util import models as util_models
from BaseRequest import Config, Client
class opensearch:
def __init__(self, config: Config):
self.Clients = Client(config=config)
self.runtime = util_models.RuntimeOptions(
connect_timeout=10000,
read_timeout=10000,
autoretry=False,
ignore_ssl=False,
max_idle_conns=50,
max_attempts=3
)
self.header = {}
def behaviorBulk(self, app_name: str, collections_name: str, doc_content: list) -> Dict[str, Any]:
try:
response = self.Clients._request(method="POST",
pathname=f'/v3/openapi/app-groups/{app_name}/data-collections/{collections_name}/data-collection-type/BEHAVIOR/actions/bulk',query={},headers = self.header,
body=doc_content, runtime=self.runtime)
return response
except Exception as e:
print(e)
if __name__ == "__main__":
# Tentukan titik akhir API OpenSearch.
endpoint = "<endpoint>"
# Tentukan protokol permintaan. Nilai yang valid: HTTPS dan HTTP.
endpoint_protocol = "HTTP"
# Baca kredensial dari variabel lingkungan.
# Tetapkan variabel lingkungan sebelum menjalankan kode ini (lihat bagian "Siapkan variabel lingkungan" di atas).
access_key_id = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID")
access_key_secret = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
# Tentukan metode autentikasi.
# Nilai yang valid: access_key (default), sts (autentikasi RAM + STS).
auth_type = "sts"
# Hanya diperlukan untuk autentikasi STS.
# Panggil operasi AssumeRole Alibaba Cloud RAM untuk mendapatkan token STS.
security_token = "<security_token>"
# Konfigurasikan parameter permintaan umum.
Configs = Config(endpoint=endpoint, access_key_id=access_key_id, access_key_secret=access_key_secret,
security_token=security_token, type=auth_type, protocol=endpoint_protocol)
# Buat instans OpenSearch.
ops = opensearch(Configs)
app_name = "app_name"
# --------------- Dorong log perilaku ---------------
# item_id: ID kunci utama yang dikembalikan dalam hasil pencarian.
item_id = "358713"
# ops_request_misc: informasi tambahan permintaan yang dikembalikan dalam hasil pencarian.
ops_request_misc = "%7B%22request%5Fid%22%3A%22161777635816780357273903%22%2C%22scm%22%3A%2220140713.130149759..%22%7D"
# bhv_type: aksi pengguna yang memicu event ini.
# Nilai yang valid: expose, cart, collect, like, comment, buy, click
bhv_type = "click"
# request_id: ID permintaan yang dikembalikan dalam hasil pencarian.
request_id = "161777635816780357273903"
# reach_time: saat server menerima event. Gunakan stempel waktu UNIX yang akurat hingga detik.
reach_time = "1709708439"
# user_id: ID unik pengguna yang memicu event.
# Gunakan ID pengguna yang login; gunakan ID cookie untuk pengguna tidak terotentikasi pada client PC.
user_id = "a7a0d37c824b659f36a5b9e3b819fcdd"
behavior_fields1 = behavior_fields2 = {
"item_id": item_id,
"sdk_type": "opensearch_sdk",
"sdk_version": "<sdk_version>", # Versi SDK OpenSearch untuk Python saat ini: 3.2.0
{"trace_id", "ALIBABA"}, # Penyedia layanan.
"trace_info": ops_request_misc,
"bhv_type": bhv_type,
"item_type": "item",
"rn": request_id,
"biz_id":"<biz_id>", # ID numerik untuk membedakan bisnis di berbagai aplikasi seluler atau client. Dapat ditautkan ke aplikasi OpenSearch dan instans Rekomendasi AI (AIRec).
"reach_time": reach_time,
"user_id": user_id,
}
behavior_documents = [{"cmd": "add", "fields": behavior_fields1}, {"cmd": "add", "fields": behavior_fields2}]
res6 = ops.behaviorBulk(app_name=app_name, collections_name=app_name, doc_content=behavior_documents)
print(res6)Jenis event perilaku
Gunakan bidang bhv_type untuk menentukan aksi yang dilakukan pengguna.
| Aksi pengguna | bhv_type nilai |
|---|---|
| Melihat produk dalam hasil pencarian | expose |
| Mengklik atau membuka produk | click |
| Menyukai produk | like |
| Menambahkan produk ke favorit | collect |
| Mengirim komentar tentang produk | comment |
| Menambahkan produk ke keranjang belanja | cart |
| Membeli produk | buy |
Bidang data perilaku
Setiap event perilaku merupakan objek JSON dalam kunci fields dokumen dengan "cmd": "add". Tabel berikut mencantumkan semua bidang beserta persyaratannya.
| Bidang | Wajib | Deskripsi | Contoh |
|---|---|---|---|
item_id | Ya | ID kunci utama item yang dikembalikan dalam hasil pencarian | "358713" |
bhv_type | Ya | Jenis aksi pengguna. Lihat Jenis event perilaku untuk nilai yang valid | "click" |
reach_time | Ya | Stempel waktu UNIX (dalam detik) saat server menerima event | "1709708439" |
user_id | Ya | Pengidentifikasi unik pengguna. Gunakan ID pengguna yang login, atau ID cookie untuk pengguna PC yang tidak terotentikasi | "a7a0d37c824b659f36a5b9e3b819fcdd" |
rn | Ya | ID permintaan yang dikembalikan dalam hasil pencarian | "161777635816780357273903" |
trace_info | Ya | Informasi tambahan permintaan (ops_request_misc) yang dikembalikan dalam hasil pencarian | String JSON yang di-encode URL |
item_type | Ya | Jenis item. Nilai tetap: "item" | "item" |
sdk_type | Ya | Pengidentifikasi SDK. Nilai tetap: "opensearch_sdk" | "opensearch_sdk" |
sdk_version | Ya | Versi OpenSearch SDK untuk Python. Versi saat ini: 3.2.0 | "3.2.0" |
trace_id | Ya | Pengidentifikasi penyedia layanan. Nilai tetap: "ALIBABA" | "ALIBABA" |
biz_id | Direkomendasikan | ID numerik yang membedakan bisnis di berbagai aplikasi seluler atau client. Dapat ditautkan ke aplikasi OpenSearch dan instans AIRec | "<biz_id>" |
cmd | Ya | Operasi dokumen. Nilai tetap: "add" | "add" |