개인화된 Amazon OpenSearch Service 결과와 개인화되지 않은 결과 비교
Personalize 검색 순위 플러그인은 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)