@@ -1128,6 +1128,7 @@ def run_search(
11281128 rerank_request = RerankRequest (query = enhanced_query , passages = passages )
11291129 reranked_results = reranker .rerank (rerank_request )
11301130
1131+ # Build text-to-node mapping for fallback text matching
11311132 text_to_indices : dict [str , list [tuple [int , NodeWithScore ]]] = {}
11321133 for idx , node in enumerate (nodes ):
11331134 node_text = node .node .get_content () or ""
@@ -1138,20 +1139,34 @@ def run_search(
11381139 reranked_nodes = []
11391140 seen_indices : set [int ] = set ()
11401141 for result in reranked_results :
1141- doc_text = result .get ("text" , "" )
11421142 score = result .get ("score" , 0.0 )
1143-
1144- if doc_text in text_to_indices :
1145- for idx , node in text_to_indices [doc_text ]:
1146- if idx not in seen_indices :
1147- reranked_nodes .append (node )
1148- rerank_scores [id (node )] = float (score )
1149- seen_indices .add (idx )
1150- break
1151-
1143+ result_idx = result .get ("id" )
1144+
1145+ # Primary: match by index (flashrank returns original passage index)
1146+ if result_idx is not None and 0 <= result_idx < len (nodes ):
1147+ if result_idx not in seen_indices :
1148+ node = nodes [result_idx ]
1149+ reranked_nodes .append (node )
1150+ rerank_scores [id (node )] = float (score )
1151+ seen_indices .add (result_idx )
1152+ else :
1153+ # Fallback: match by text content
1154+ doc_text = result .get ("text" , "" )
1155+ if doc_text in text_to_indices :
1156+ for idx , node in text_to_indices [doc_text ]:
1157+ if idx not in seen_indices :
1158+ reranked_nodes .append (node )
1159+ rerank_scores [id (node )] = float (score )
1160+ seen_indices .add (idx )
1161+ break
1162+
1163+ # Add remaining unmatched nodes with minimum matched score
1164+ # This ensures Jira/Confluence results aren't dropped due to text mismatch
1165+ min_score = min (rerank_scores .values ()) if rerank_scores else 0.0
11521166 for idx , node in enumerate (nodes ):
11531167 if idx not in seen_indices :
11541168 reranked_nodes .append (node )
1169+ rerank_scores [id (node )] = min_score
11551170
11561171 nodes = reranked_nodes [:rerank_limit ]
11571172 except Exception as e :
0 commit comments