Run a single query and analyze results Returns: Dict containing: - query: the query string - total_results: total number of results - unique_results: number after deduplication - results_by_source: dict of source -> count
(self, query: str, site: str = "all", num_results: int = 50)
| 31 | self.retriever = get_vector_db_client() |
| 32 | |
| 33 | async def run_query(self, query: str, site: str = "all", num_results: int = 50) -> dict[str, Any]: |
| 34 | """ |
| 35 | Run a single query and analyze results |
| 36 | |
| 37 | Returns: |
| 38 | Dict containing: |
| 39 | - query: the query string |
| 40 | - total_results: total number of results |
| 41 | - unique_results: number after deduplication |
| 42 | - results_by_source: dict of source -> count |
| 43 | - duplicates: number of duplicate results |
| 44 | """ |
| 45 | print(f"\n{'='*60}") |
| 46 | print(f"Query: '{query}' | Site: {site}") |
| 47 | print('='*60) |
| 48 | |
| 49 | try: |
| 50 | # Run the search |
| 51 | results = await self.retriever.search(query, site, num_results) |
| 52 | |
| 53 | # Analyze results |
| 54 | total_results = len(results) |
| 55 | |
| 56 | # Track unique URLs and sources |
| 57 | unique_urls = set() |
| 58 | results_by_source = {} |
| 59 | url_to_sources = {} |
| 60 | |
| 61 | for result in results: |
| 62 | # Extract URL and source from result |
| 63 | # Result format is typically [url, json, name, site] |
| 64 | if len(result) >= 4: |
| 65 | url = result[0] # URL is first |
| 66 | source = result[3] # site/source is fourth |
| 67 | |
| 68 | # Track unique URLs |
| 69 | unique_urls.add(url) |
| 70 | |
| 71 | # Track sources |
| 72 | if source not in results_by_source: |
| 73 | results_by_source[source] = 0 |
| 74 | results_by_source[source] += 1 |
| 75 | |
| 76 | # Track which sources have each URL (for duplicate detection) |
| 77 | if url not in url_to_sources: |
| 78 | url_to_sources[url] = [] |
| 79 | url_to_sources[url].append(source) |
| 80 | |
| 81 | # Find duplicates |
| 82 | duplicates = {url: sources for url, sources in url_to_sources.items() if len(sources) > 1} |
| 83 | |
| 84 | analysis = { |
| 85 | "query": query, |
| 86 | "site": site, |
| 87 | "total_results": total_results, |
| 88 | "unique_results": len(unique_urls), |
| 89 | "results_by_source": results_by_source, |
| 90 | "duplicate_count": len(duplicates), |