轻松上手腾讯云Elasticsearch,解锁向量搜索新姿势!

在腾讯云上申请es集群

购买方式: link
买好之后,在控制台上你就可以看到这个
在这里插入图片描述
然后点击创建好的es集群,然后在这里配置一下访问的白名单
在这里插入图片描述

用python 连接es,并导入数据

# 1. 建立 Elasticsearch 连接
def connect_elasticsearch():
    # Elasticsearch 连接配置
    es = Elasticsearch(
        hosts=["https://es-h1ruad8u.public.tencentelasticsearch.com:9200"],
        # 填入用户名和密码
        basic_auth=('username', 'passwd'),
        ca_certs="server-certificates.pem",
        client_cert="client-certificates.pem",  # 如果需要
        client_key="client-certificates.key",  # 如果需要
        verify_certs=True,  # 如果是自签名证书,可能需要设置为 False
        request_timeout=30
    )
    
    # 检查连接是否成功
    if es.ping():
        print("成功连接到 Elasticsearch")
    else:
        print("连接失败")
    return es
 
 #使用向量模型   
def load_model():
    # 指定本地保存路径
    model_path = "./models/all-MiniLM-L6-v2"
    # 检查模型是否已经存在,如果不存在则下载并保存
    if not os.path.exists(model_path):
        print("模型不存在,正在下载...")
        model = SentenceTransformer('all-MiniLM-L6-v2')
        # 保存到本地
        model.save(model_path)
        print(f"模型已下载并保存到 {model_path}")
    else:
        print("模型已存在,直接从本地加载...")
        # 直接从本地加载模型
        model = SentenceTransformer(model_path)
    return model
   
   # 创建索引
def create_index(es_client, index_name="embeddings_demo"):
    # 定义 mapping,设置 embedding 字段为 dense_vector 类型
    mapping = {
        "mappings": {
            "properties": {
                "embedding": {
                    "type": "dense_vector",
                    "dims": 384  # 替换为你的 embedding 维度
                },
                "text": {
                    "type": "text"
                }
            }
        }
    }
    
    # 创建索引(如果不存在)
    if not es_client.indices.exists(index=index_name):
        es_client.indices.create(index=index_name, body=mapping)
        print(f"创建索引 {index_name}")
    else:
        print(f"索引 {index_name} 已存在")
     
 #插入数据
def process_text_list(es_client, index_name, text_list, model):
    for i, text in enumerate(text_list):
        embedding = model.encode(text).tolist()
                
        # 使用递增的 doc_id
        doc_id = str(i + 1)
        
        # 导入数据
        result = import_embedding(
            es_client,
            index_name=index_name,
            doc_id=doc_id,
            text=text,
            embedding=embedding
        )
        print(f"导入结果 (doc_id={doc_id}): {result}")
     

连接es,并进行文本检索

def check_cosine_similarity(es_client, index_name, embedding, threshold=0.9):
    query = {
        "query": {
            "script_score": {
                "query": {"match_all": {}},
                "script": {
                    "source": "cosineSimilarity(params.query_vector, 'embedding') + 1.0",
                    "params": {"query_vector": embedding}
                }
            }
        },
        "min_score": threshold + 1.0,  
        "size": 1  # 这个可以调整
    }
    response = es_client.search(index=index_name, body=query)
    hits = response["hits"]["hits"]
    if len(hits) > 0:
        print(f"找到相似文本: {hits[0]['_source']['text']}, 相似度: {hits[0]['_score'] - 1.0}")
    return len(hits) > 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值