本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
比较个性化 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)