davidtran999 commited on
Commit
750be9b
·
verified ·
1 Parent(s): 393b8b5

Upload backend/hue_portal/core/hybrid_search.py with huggingface_hub

Browse files
backend/hue_portal/core/hybrid_search.py CHANGED
@@ -109,23 +109,48 @@ def get_bm25_scores(
109
  return []
110
 
111
  try:
112
- expanded_queries = expand_query_with_synonyms(query)
113
- combined_query = None
114
- for q_variant in expanded_queries:
115
- variant_query = SearchQuery(q_variant, config="simple")
116
- combined_query = variant_query if combined_query is None else combined_query | variant_query
 
 
 
 
 
 
 
 
117
 
118
- if combined_query is not None:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  ranked_qs = (
120
  queryset
121
- .annotate(rank=SearchRank(F("tsv_body"), combined_query))
122
  .filter(rank__gt=DEFAULT_MIN_BM25_SCORE)
123
  .order_by("-rank")
124
  )
125
- results = list(ranked_qs[:top_k * 2]) # Get more for hybrid ranking
126
  return [(obj, float(getattr(obj, "rank", 0.0))) for obj in results]
 
 
127
  except Exception as e:
128
- print(f"Error in BM25 search: {e}")
129
 
130
  return []
131
 
 
109
  return []
110
 
111
  try:
112
+ import sys
113
+ # Increase recursion limit for query expansion
114
+ old_limit = sys.getrecursionlimit()
115
+ try:
116
+ sys.setrecursionlimit(3000) # Increase limit for query expansion
117
+ expanded_queries = expand_query_with_synonyms(query)
118
+ # Limit expanded queries to prevent too many variants
119
+ expanded_queries = expanded_queries[:5] # Max 5 variants
120
+
121
+ combined_query = None
122
+ for q_variant in expanded_queries:
123
+ variant_query = SearchQuery(q_variant, config="simple")
124
+ combined_query = variant_query if combined_query is None else combined_query | variant_query
125
 
126
+ if combined_query is not None:
127
+ ranked_qs = (
128
+ queryset
129
+ .annotate(rank=SearchRank(F("tsv_body"), combined_query))
130
+ .filter(rank__gt=DEFAULT_MIN_BM25_SCORE)
131
+ .order_by("-rank")
132
+ )
133
+ results = list(ranked_qs[:top_k * 2]) # Get more for hybrid ranking
134
+ return [(obj, float(getattr(obj, "rank", 0.0))) for obj in results]
135
+ finally:
136
+ sys.setrecursionlimit(old_limit) # Restore original limit
137
+ except RecursionError as e:
138
+ print(f"Error in BM25 search (recursion): {e}", flush=True)
139
+ # Fallback: use original query without expansion
140
+ try:
141
+ variant_query = SearchQuery(query, config="simple")
142
  ranked_qs = (
143
  queryset
144
+ .annotate(rank=SearchRank(F("tsv_body"), variant_query))
145
  .filter(rank__gt=DEFAULT_MIN_BM25_SCORE)
146
  .order_by("-rank")
147
  )
148
+ results = list(ranked_qs[:top_k * 2])
149
  return [(obj, float(getattr(obj, "rank", 0.0))) for obj in results]
150
+ except Exception as fallback_e:
151
+ print(f"Error in BM25 search fallback: {fallback_e}", flush=True)
152
  except Exception as e:
153
+ print(f"Error in BM25 search: {e}", flush=True)
154
 
155
  return []
156