54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
import logging
|
||
|
||
from ElasticSearch.Utils.ElasticsearchConnectionPool import ElasticsearchConnectionPool
|
||
|
||
# 初始化日志
|
||
logger = logging.getLogger(__name__)
|
||
logger.setLevel(logging.INFO)
|
||
|
||
class EsSearchUtil:
|
||
def __init__(self, es_config):
|
||
"""
|
||
初始化Elasticsearch搜索工具
|
||
:param es_config: Elasticsearch配置字典,包含hosts, username, password, index_name等
|
||
"""
|
||
self.es_config = es_config
|
||
|
||
# 初始化连接池
|
||
self.es_pool = ElasticsearchConnectionPool(
|
||
hosts=es_config['hosts'],
|
||
basic_auth=es_config['basic_auth'],
|
||
verify_certs=es_config.get('verify_certs', False),
|
||
max_connections=50
|
||
)
|
||
|
||
self.index_name = es_config['index_name']
|
||
logger.info(f"EsSearchUtil初始化成功,索引名称: {self.index_name}")
|
||
|
||
def text_search(self, query, size=10):
|
||
# 从连接池获取连接
|
||
conn = self.es_pool.get_connection()
|
||
try:
|
||
# 使用连接执行搜索
|
||
result = conn.search(
|
||
index=self.es_config['index_name'],
|
||
query={"match": {"user_input": query}},
|
||
size=size
|
||
)
|
||
return result
|
||
except Exception as e:
|
||
logger.error(f"文本搜索失败: {str(e)}")
|
||
raise
|
||
finally:
|
||
# 释放连接回连接池
|
||
self.es_pool.release_connection(conn)
|
||
|
||
def hybrid_search(self, query, size=10):
|
||
# 注意:混合搜索方法需要更新以使用火山引擎API计算向量
|
||
# 此处保留方法框架,具体实现需要根据火山引擎API进行调整
|
||
pass
|
||
|
||
# 以下功能已删除,建议通过火山引擎API实现向量计算:
|
||
# 1. 本地模型加载和相关配置 (KeyedVectors)
|
||
# 2. text_to_embedding方法 (基于本地模型的向量计算)
|
||
# 3. vector_search方法 (使用本地模型向量的搜索) |