From 11d4b33170dc4e1a3bd76131c05f85e693cbeefd Mon Sep 17 00:00:00 2001 From: HuangHai <10402852@qq.com> Date: Tue, 19 Aug 2025 09:18:25 +0800 Subject: [PATCH] 'commit' --- .../ElasticSearch/T1_RebuildMapping.py | 53 +++----------- .../ElasticSearch/Utils/EsSearchUtil.py | 65 +++++++++++++++++- .../__pycache__/EsSearchUtil.cpython-310.pyc | Bin 5366 -> 6454 bytes 3 files changed, 72 insertions(+), 46 deletions(-) diff --git a/dsSchoolBuddy/ElasticSearch/T1_RebuildMapping.py b/dsSchoolBuddy/ElasticSearch/T1_RebuildMapping.py index a0507c7b..075c8263 100644 --- a/dsSchoolBuddy/ElasticSearch/T1_RebuildMapping.py +++ b/dsSchoolBuddy/ElasticSearch/T1_RebuildMapping.py @@ -1,47 +1,14 @@ -import warnings - -from elasticsearch import Elasticsearch - from Config import Config +from ElasticSearch.Utils.EsSearchUtil import EsSearchUtil, disableWarning -# 抑制HTTPS相关警告 -warnings.filterwarnings('ignore', message='Connecting to .* using TLS with verify_certs=False is insecure') -warnings.filterwarnings('ignore', message='Unverified HTTPS request is being made to host') +# 禁用警告 +disableWarning() -# 初始化ES连接 -es = Elasticsearch( - hosts=Config.ES_CONFIG['hosts'], - basic_auth=Config.ES_CONFIG['basic_auth'], - verify_certs=False -) +# 创建EsSearchUtil实例 +search_util = EsSearchUtil(Config.ES_CONFIG) -# 定义mapping结构 -mapping = { - "mappings": { - "properties": { - "embedding": { - "type": "dense_vector", - "dims": 1024, # embedding维度为1024 - "index": True, - "similarity": "l2_norm" # 使用L2距离 - }, - "user_input": {"type": "text"}, - "tags": { - "type": "object", - "properties": { - "tags": {"type": "keyword"}, - "full_content": {"type": "text"} - } - } - } - } -} - -# 创建索引 -index_name = Config.ES_CONFIG['index_name'] -if es.indices.exists(index=index_name): - es.indices.delete(index=index_name) - print(f"删除已存在的索引 '{index_name}'") - -es.indices.create(index=index_name, body=mapping) -print(f"索引 '{index_name}' 创建成功,mapping结构已设置。") \ No newline at end of file +# 调用重建mapping方法 +if search_util.rebuild_mapping(): + print("重建mapping操作完成成功") +else: + print("重建mapping操作失败") \ No newline at end of file diff --git a/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py b/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py index 033858d9..9be86ef5 100644 --- a/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py +++ b/dsSchoolBuddy/ElasticSearch/Utils/EsSearchUtil.py @@ -11,9 +11,15 @@ from langchain_openai import OpenAIEmbeddings from pydantic import SecretStr from Config import Config -# 抑制HTTPS相关警告 -warnings.filterwarnings('ignore', message='Connecting to .* using TLS with verify_certs=False is insecure') -warnings.filterwarnings('ignore', message='Unverified HTTPS request is being made to host') + +# 禁用HTTPS相关警告 +def disableWarning(): + # 抑制HTTPS相关警告 + warnings.filterwarnings('ignore', message='Connecting to .* using TLS with verify_certs=False is insecure') + warnings.filterwarnings('ignore', message='Unverified HTTPS request is being made to host') + +# 初始化配置 +disableWarning() # 初始化日志 logger = logging.getLogger(__name__) @@ -37,6 +43,59 @@ class EsSearchUtil: self.index_name = es_config['index_name'] logger.info(f"EsSearchUtil初始化成功,索引名称: {self.index_name}") + + def rebuild_mapping(self): + """ + 重建Elasticsearch索引和mapping结构 + + 返回: + bool: 操作是否成功 + """ + try: + # 从连接池获取连接 + conn = self.es_pool.get_connection() + + # 定义mapping结构 + mapping = { + "mappings": { + "properties": { + "embedding": { + "type": "dense_vector", + "dims": 1024, # embedding维度为1024 + "index": True, + "similarity": "l2_norm" # 使用L2距离 + }, + "user_input": {"type": "text"}, + "tags": { + "type": "object", + "properties": { + "tags": {"type": "keyword"}, + "full_content": {"type": "text"} + } + } + } + } + } + + # 检查索引是否存在,存在则删除 + if conn.indices.exists(index=self.index_name): + conn.indices.delete(index=self.index_name) + logger.info(f"删除已存在的索引 '{self.index_name}'") + print(f"删除已存在的索引 '{self.index_name}'") + + # 创建索引和mapping + conn.indices.create(index=self.index_name, body=mapping) + logger.info(f"索引 '{self.index_name}' 创建成功,mapping结构已设置") + print(f"索引 '{self.index_name}' 创建成功,mapping结构已设置。") + + return True + except Exception as e: + logger.error(f"重建mapping失败: {str(e)}") + print(f"重建mapping失败: {e}") + return False + finally: + # 释放连接回连接池 + self.es_pool.release_connection(conn) def text_search(self, query, size=10): # 从连接池获取连接 diff --git a/dsSchoolBuddy/ElasticSearch/Utils/__pycache__/EsSearchUtil.cpython-310.pyc b/dsSchoolBuddy/ElasticSearch/Utils/__pycache__/EsSearchUtil.cpython-310.pyc index 8f081a8f832016bf144f6e65ab75173a36646cd9..8fa38d1441e8e11a017da5fe94c01df160e8758a 100644 GIT binary patch delta 2785 zcma)8U2Gf25#GH!9w|y9De7OAZOXEK&X$$Lag0Vy9osRLrj}(iaw3~f%2M2wbn=PE z?j55a$Yl@-h!Ipp+>47OmQ%S&fAr84t&O&5k{0Mw5u`=litbZ^mi~EZfdWknzqm7Z zlrK4*D$TU;mi1OnX4!WvoA zN+`3P4YFofYvG-s-!ZAPR@MgkoxGW~pHsxY7tio^9$KcE6zj-z!5-yZY#Z;oOs*)n z5l_u@^DfrOwy!Fg-MokGz%{m$_wwB=)lTqTrl9G%0ztsO@1CCRT2_vc7kgh&GW{6? ze7ku+Snj@}`j$Pcha0T7o#0+oO&>SD!us3E`W|MmJy(_cmiD5_H-0ou7#$-T;d>W8 zqa-sx$zlg&y^js>4nBaXR1@!E1D>Yrr4M-zD{DvcSn2y84TPuQby7fFGD8_<3R71V zx+!Ua#K;&iLZjX%%5smP$jDqy6wJbuBV&`M<#MqpZx9iKP$K57gpPN`nCavuEIuAs zCvYd+GNvS{K*>9)b`10a!%2oRl2LGfxOSDPOoLyI)i9lfS7;{0B9KA!+N%0ItxbZ5 zXhhQF{ate&Zvj^7mOVAah1AT#qzyT04!0&nD_R99As0u>NH%L0OgEd|?)^FRNI6eI zx%psv2uQywL$I=VY0+FFGi04!CFiU4VHyizUTYeQuo{yBSRtU8a1wfF)|AwcHG*9OO%{f%K)C8kU$-4aqE`=m7Cy!1X`BV zP4JDAGlaFCSHGz~5Ug#is-L5CpW9}R811D6tY@nF+^Q8_onaeBPD1Juw4OWcVCkn6m}j0NlB`DJN4m zS+cBb-Y&Sj;BF|skJt&0hAM0L>;z{F4lAQ2r_2Swu~>4&URd6s0{fxV0i<$a{q|e$ zRet&N%1_>`to``r+bcJ(W3f_wcW58PL_?`f*lgin5nwkLOMM{pr79OLL$QN`{NuyV zmltB*djB^!KYG8khm`+s7r3>9vJ-oRT3fge|1% zxWdpxC)#NkT!yO&NXj2<@VMX;CDUTrs>ws(u5raysX@b>5H9dXUvD{bFOI(J`mZ9>hHGt=LyZ`-2Ai{gk22P zzZ&lkx>3f8hyy^R9soX=NJFUpA`-l4@dT1D0Woy{h~gM3(nt;gk-Fec$#TVE)I2cF zY7vOpAUK0{X9tj|qQPk*)cbDufPNGdhVFeD?sOl7ecej{BwUHdDgy!E9RhD+HJL=$d=*Cr4e0xRY>r$`~!1>}_2g={wx z?DrtIe&h@!dyotOfiVGK1!(R=%^(u&V_D;xvpnv&x!Iz41htO>@xt-5wAahWpXx-T z!2B$7=v~E)c+vY^{CJCa4D|<*JdOklB~E+$65ahWkv?%WeJp$8>5Bg9%393whq5O2IaLy5Dy*r6r2QeY3 zGCTi2LDyo!02OX_tL9nP&T{9X_iV!)wY`rUo}_6nnmkOu<{eKSqJ!RR$+O)fxI2Dq z4LWKJ!oYghx#cbU-#-8KQ8-!4P*_BkrDrsE}p?PY!n%BK*?X?meigZ9X{#9 z(r+B8;^@#2T>%_mF4~r`(Wy3Qj%*1UIOr@KH+~1maL`#!P~PWJ|L7!A3q93ofN&d% key<)z&hOQG$n?3m_eRrTT}0LOs9Fbz?0mudV^jZs0f2$u8~^|S delta 1673 zcmZ8gOK%)S5T2gdon5cjBPAmRd{YSuW9k-Db4s=lwPyQ;oF z_|&$7wziB0->1JlT+Z}uSpB-DZ%lq(;N)s2%dl3Ky{!{%>(qv)jVFDp7HePESo@kz z^K2j6$qTH5_pwe`UA%uW&AM4`JxK@He%1rFUfvJ-!9|nhSpoDzyqoo1)5X8HF7Z51 zt`S;f{dAb;?v1bkKD?>j)$bDsTD&^ShuI(-x~#h-dj$DQuJrPLl?>~i8@-xU=BVd} zQ8lR5rxxU~_Jx8<)`jaw%J8@km)wh#TfASlk1xEOnaahaPJA^$1x|Ij;a>}n0V>3T zb+qY*Nz7*%qk~wwI1DP);syRv41v@uOX1_89Y5%$?HZr94Y7R??HC^`375f!p|YOt zUZq*a{g6A?pNxu9K{&f#fIl$Lqyzl!W59W!$$XQrLGbJH`k&iskF8EQ2(Cr>QQ zI3K(>D=H+y z1Oi`e1Q+TdB4@j{4m1M~FUSYoHwcx5+?%8*Y3?|ATW;p2$beM2%cV&qA|PxsZHLRl3(YZO1v|F z`dmCFVhqg6z^+bUw>R4mN)vd3f{C^^r_yOeuGgGsoVIu#RjN7A;Z*a@-$2886c<4# oV;M%O6OZ_)&6gR)-Sg*(cX|1HZ#iq}7ReY{n1ucbY2{1*0Zyi