Untitled
unknown
plain_text
a year ago
3.6 kB
8
Indexable
import boto3 from pydantic import BaseModel from typing import List import json class UserPrompt(BaseModel): query: str class CustomerSearchResultItem(BaseModel): lookup_id: str lookup_value: str linked_records: List[str] class CustomerSearchResults(BaseModel): hits: List<CustomerSearchResultItem] found: int class CustomerSearchParameters(BaseModel): query: str fields: List[str] = ["lookup_id", "lookup_value"] sort: str = '_score desc' size: int = 10 class CustomerCloudSearchClient: def __init__(self, domain_endpoint: str): self.client = boto3.client('cloudsearchdomain', endpoint_url=domain_endpoint, region_name="us-east-1", aws_access_key_id="YOUR_AWS_ACCESS_KEY_ID", aws_secret_access_key="YOUR_AWS_SECRET_ACCESS_KEY") def search(self, params: CustomerSearchParameters) -> CustomerSearchResults: response = self.client.search( query=params.query, queryParser='simple', sort=params.sort, size=params.size, queryOptions=json.dumps({"fields": params.fields}) ) search_results = [] for hit in response['hits']['hit']: search_results.append(CustomerSearchResultItem( lookup_id=hit['fields'].get('lookup_id', [''])[0], lookup_value=hit['fields'].get('lookup_value', [''])[0], linked_records=hit['fields'].get('linked_records', []) )) return CustomerSearchResults( hits=search_results, found=response['hits']['found'] ) def format_customer_search_results(customer_search_results: CustomerSearchResults, keyword: str) -> List[dict]: """ Formats the customer search results into a list of dictionaries representing each result item. Args: - customer_search_results (CustomerSearchResults): The customer search results object containing customer information. - keyword (str): The keyword used for the search. Returns: - list: List of dictionaries, each representing a formatted customer search result. """ formatted_results = [] for item in customer_search_results.hits: # Format matches list matches = [ { "query_by_value": item.lookup_id, "lookup_value": item.lookup_value, "user_friendly_value": "" } ] # Construct formatted result dictionary formatted_result = { "type": "customer", "index_name": "fincopilot-dim-customer", "total_count": customer_search_results.found, "extracted_count": len(matches), "matched_on": keyword, "matches": matches } formatted_results.append(formatted_result) return formatted_results def handle_user_prompt_for_Customer(user_prompt: UserPrompt, field: str) -> CustomerSearchResults: with open('config.json', 'r') as f: config = json.load(f) client = CustomerCloudSearchClient(config['CUSTOMER_DOMAIN_ENDPOINT']) params = CustomerSearchParameters(query=user_prompt.query, fields=[field]) results = client.search(params) return results if __name__ == "__main__": # Replace with your CloudSearch domain endpoint query = "Australia" user_prompt = UserPrompt(query=query) results = handle_user_prompt_for_Customer(user_prompt, field='lookup_value') formatted_results = format_customer_search_results(results, query) print(formatted_results)
Editor is loading...
Leave a Comment