From 6693b8a1b0f50c92c4b354103354e7fd0fcbbb0f Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Tue, 19 Aug 2025 10:23:33 +0800 Subject: [PATCH] 'commit' --- .../ElasticSearch/T7_XiangLiangQuery.py | 27 +--------------- .../ElasticSearch/Utils/EsSearchUtil.py | 29 ++++++++++++++++++ .../__pycache__/EsSearchUtil.cpython-310.pyc | Bin 10407 -> 11475 bytes 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/dsSchoolBuddy/ElasticSearch/T7_XiangLiangQuery.py b/dsSchoolBuddy/ElasticSearch/T7_XiangLiangQuery.py index 1bf022f4..7e9cfc90 100644 --- a/dsSchoolBuddy/ElasticSearch/T7_XiangLiangQuery.py +++ b/dsSchoolBuddy/ElasticSearch/T7_XiangLiangQuery.py @@ -1,6 +1,4 @@ import logging -import warnings -from typing import List, Tuple, Dict from Config.Config import ES_CONFIG from ElasticSearch.Utils.EsSearchUtil import EsSearchUtil @@ -10,29 +8,6 @@ logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) -def merge_results(keyword_results: List[Tuple[Dict, float]], vector_results: List[Tuple[Dict, float]]) -> List[Tuple[Dict, float, str]]: - """ - 合并关键字搜索和向量搜索结果 - """ - # 标记结果来源并合并 - all_results = [] - for doc, score in keyword_results: - all_results.append((doc, score, "关键字搜索")) - for doc, score in vector_results: - all_results.append((doc, score, "向量搜索")) - - # 去重并按分数排序 - unique_results = {} - for doc, score, source in all_results: - doc_id = doc['_id'] - if doc_id not in unique_results or score > unique_results[doc_id][1]: - unique_results[doc_id] = (doc, score, source) - - # 按分数降序排序 - sorted_results = sorted(unique_results.values(), key=lambda x: x[1], reverse=True) - return sorted_results - - if __name__ == "__main__": # 初始化EsSearchUtil search_util = EsSearchUtil(ES_CONFIG) @@ -77,7 +52,7 @@ if __name__ == "__main__": print("\n=== 合并搜索结果 ===") # 为关键字结果添加分数 keyword_results_with_scores = [(doc, doc['_score']) for doc in keyword_hits] - merged_results = merge_results(keyword_results_with_scores, reranked_vector_results) + merged_results = search_util.merge_results(keyword_results_with_scores, reranked_vector_results) print(f"合并后唯一结果数量: {len(merged_results)}") # 4. 打印最终结果 diff --git a/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py b/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py index 808bd36f..583025df 100644 --- a/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py +++ b/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py @@ -411,3 +411,32 @@ class EsSearchUtil: print(f"分数: {score:.4f}") print("---") + def merge_results(self, keyword_results: List[Tuple[Dict, float]], vector_results: List[Tuple[Dict, float]]) -> List[Tuple[Dict, float, str]]: + """ + 合并关键字搜索和向量搜索结果 + + 参数: + keyword_results: 关键字搜索结果列表,每个元素是(文档, 分数)元组 + vector_results: 向量搜索结果列表,每个元素是(文档, 分数)元组 + + 返回: + list: 合并后的结果列表,每个元素是(文档, 分数, 来源)元组 + """ + # 标记结果来源并合并 + all_results = [] + for doc, score in keyword_results: + all_results.append((doc, score, "关键字搜索")) + for doc, score in vector_results: + all_results.append((doc, score, "向量搜索")) + + # 去重并按分数排序 + unique_results = {} + for doc, score, source in all_results: + doc_id = doc['_id'] + if doc_id not in unique_results or score > unique_results[doc_id][1]: + unique_results[doc_id] = (doc, score, source) + + # 按分数降序排序 + sorted_results = sorted(unique_results.values(), key=lambda x: x[1], reverse=True) + return sorted_results + diff --git a/dsSchoolBuddy/ElasticSearch/Utils/__pycache__/EsSearchUtil.cpython-310.pyc b/dsSchoolBuddy/ElasticSearch/Utils/__pycache__/EsSearchUtil.cpython-310.pyc index 5dd71999b76286ee04744f468a3616198cc641b0..f9158876c10cc14d8c160cf2c688b2e329422c67 100644 GIT binary patch delta 1014 zcmZuvTTc@~6rS1LZnvcr9v30W_-;4jW7DU$x-Se ztyCk`v^J)aAZg1v!gZw2zAiP6gs7KR(<*u-Ci#&ck^INcY#KiHHQ&$2luS7yj1w~ zp|H5I^WUPEEi^Ajkh2=*(cOTl{JGz61t}zfi0N;FJ4+KsZ=?-2Aa77Nm zSp@al$+{Mg5jRs}B;K`822NyqgImvDZGB$W3yXKQzvRlRSygb%Lr+;A(c4FxmnY(c zO+q&cvdSiM349dX)F5y~updfYx==*305o-+$2YUZbT_m>Gp`LAk=aQS8Ttq;reM*~ zeD8U4ltx%|`f@66^vzN>MN5A}-=L9*MhtTZlHCu-bSW>x)$&e8)0CN1m)Si*t(pmz zq9m`TBZfsy-OZX&79q9*L-rIxxFTX0C1PfY_JU}8tsC*AReq8QT`X0c>{6D$5xVw? zsXVaibD^jS5Q@ixYp`&oUG`!P`>+>Fw;N;y&o})m)xHwaaihHuTEc6#+SwNH0f&Y( htTnj%-8F$$pRXnos`s7o^$ge9Bb|Tnx;@er`wK$vC6@pI delta 163 zcmcZ{xjc|BpO=@50SMmRS)B3MawFelMs7|Z*8zx&&oE40!zeAPmco|8-ohBgnxdY< znZgBRv88BCzQZWZs5$uuqraqDid-sZihL?Zia@Gx8e57&ied|Elt_x!wycyG&kWc8F>i_p+q%N340ms$+_D9 L8K+Oq)ky;Yo$)Bq