比较个性化 Amazon OpenSearch Service 结果与不进行个性化的结果 - Amazon Personalize
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

比较个性化 Amazon OpenSearch Service 结果与不进行个性化的结果

Amazon Personalize 搜索排名插件根据 Amazon Personalize 的排名和 OpenSearch 的排名,重新排列搜索结果。插件对结果进行重新排名的方式取决于您在管道中配置 personalized_search_ranking 响应处理器的方式。

要了解如何对结果进行排名,您可以在设置个性化和不设置个性化的情况下运行查询,然后比较结果。您可以使用以下 Python 代码来运行两个不同的查询,并将结果输出到两个 JSON 文件中。第一种方法运行一个使用插件对结果进行重新排名的查询。第二种方法运行一种不设置个性化时生成结果的方法。

import json import requests from requests_auth_aws_sigv4 import AWSSigV4 # Returns re-ranked OpenSearch results using the Amazon Personalize Search Ranking plugin. def get_personalized_results(pipeline_name): url = f'{domain}/{index}/_search/' auth = AWSSigV4('es') headers = {'Content-Type': 'application/json'} params = {"search_pipeline": pipeline_name} body = { "query": { "multi_match": { "query": "Toyota", "fields": ["BRAND"] } }, "ext": { "personalize_request_parameters": { "user_id": "1" } } } try: response = requests.post(url, auth=auth, params=params, json=body, headers=headers, verify=False) except Exception as e: return f"Error: {e}" return response.text # Returns OpenSearch results without personalization. def get_opensearch_results(): url = f'{domain}/{index}/_search/' auth = AWSSigV4('es') headers = {'Content-Type': 'application/json'} body = { "query": { "multi_match": { "query": "Toyota", "fields": ["BRAND"] } } } try: response = requests.post(url, auth=auth, json=body, headers=headers, verify=False) except Exception as e: return f"Error: {e}" return response.text def print_results(file_name, results): results_file = open(file_name, 'w') results_file.write(json.dumps(results, indent=4)) results_file.close() # specify domain endpoint domain = "DOMAIN_ENDPOINT" # specify the region where you created your Amazon Personalize resources and Amazon OpenSearch domain aws_region = "REGION" # specify the name of the pipeline that uses the Amazon Personalize plugin pipeline_name = "PIPELINE_NAME" # specify your Amazon OpenSearch index index = "INDEX" # specify names for json files for comparison personalized_results_file = "personalized_results.json" opensearch_results_file = "opensearch_results.json" # get personalized results personalized_results = json.loads(get_personalized_results(pipeline_name)) # get OpenSearch results without personalization opensearch_results = json.loads(get_opensearch_results()) # print results to files print_results(personalized_results_file, personalized_results) print_results(opensearch_results_file, opensearch_results)