elasticsearch 关于向量化检索

1、elasticsearch使用的是8.5.0

索引和mapping构建:

PUT image-index
{"mappings": {"properties": {"mydatavector": {"type": "dense_vector","dims": 3,"index": true,"similarity": "dot_product"},"title": {"type": "text"}}}
}

 2、数据入库:使用python的elasticsearch 包如果为7.11的,可以同时兼容6.x、7.x、8.x版本

from sentence_transformers import SentenceTransformer

from elasticsearch import Elasticsearch

from elasticsearch.helpers import bulk

encoder = SentenceTransformer('你的模型本地路径')

client2 = Elasticsearch(['http://用户名:密码@IP:PORT'])

def batch_write(data):
    actions = [
        {

            "_index": "index_name",  # 替换为您的索引名称
            "_source": d,
            "_id": d["id"]

        }
        for d in data
    ]

    try:
        bulk(client2, actions)

    except Exception as e:
        print("bach write error")

def es_data_mapping(json_data):

    question = json_data["title"].strip().replace(" ", "")

    #注意这里的normalize_embeddings=True和mapping中的"similarity": "dot_product"相对应

    doc_vector = encoder.encode([question],convert_to_tensor=False,normalize_embeddings=True).tolist()[0]

    json_data["mydatavector"] = doc_vector

    return json_data

batch_write_num = 200

def write_data_2_es():

    data_list = [{"id":"1","title":"大家好"}]

    write_list = []

    for each in data_list:

        write_list.append(es_data_mapping(each))

        if len(write_list)>batch_write_num:

            batch_write(write_list)

            write_list.clear()

    if len(write_list) > 0:

        batch_write(write_list)

        write_list.clear()

if __name__ == '__main__':

    write_data_2_es()

3、查询检索:

POST http://IP:PORT/INDEX_NAME/_search

{

"_source": ["mydatavector","title"],

"min_score": 0.5,

    "knn": {
        "field": "mydatavector",

        "query_vector": [0,0,0],
        "k": 3,
        "num_candidates": 100,

        "filter": {
            "bool": {
                "must": [

                    {
                        "terms": {
                            "title": [

                                "狗头"
                            ]
                        }

                    }
                ]
            }

        }
    }
}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是死锁?死锁产生的条件是什么?

死锁 死锁是指两个或两个以上的进程(或线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进…

【学习】linux实用命令

LINUX命令 普通用户查询系统信息 命令 : [wlm]$ cat /ect/os-release NAME "Kylin" VERSION ""功能: 这个输出会告诉你正在使用的操作系统的名称(NAME)、版本(VERSION 或 VERSION_ID&#xf…

基于sfunction builder的c-sfunction编写——自定义函数编写

目录 前言 1、sfunction builder自定义函数编写方法一 2、sfunction builder自定义函数编写方法二 3.总结

Node.JS后端开发笔记整理(简洁版)

前端 1. 开发环境和技术栈 开发工具:Visual Studio CodeNode.js版本:18.19.0(建议保持在18)包管理器:npm前端框架:Vue3.4脚本语言:TypeScript构建工具:Vite后端框架:Ex…

ubuntu设置扩充swap交换空间

Swap是指Linux系统中的交换分区,类似于Windows的虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟成内存来使用,从而解决内存不足的问题。交换分区,它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行! …

Golang基础-13

Go语言基础 介绍 并发 channel goroutine 互斥锁 读写锁 原子操作 select 超时处理 sync包 runtime包 介绍 本文介绍Go语言中 channel、goroutine、互斥锁、读写锁、原子操作、select、超时处理、sync包、runtime包等相关知识。 并发 进程是是最小的资源管理单元…

异步FIFO约束set_max_delay

1.最大延迟set_max_delay set_max_delay [-datapath_only] -from [ node_list] -to [node_list] delay_value 在Set Max Delay约束中使用-datapath_only选项时,它指示综合工具在优化设计时仅考虑数据通路的延迟,而不考虑控制逻辑的延迟。 关于最大最小…

大话数据结构学习笔记-线性表(二)-顺序存储结构

顺序存储定义 线性表的顺序存储结构,指的是用一段地址连续的存储单元一次存储线性表的数据元素。一般就是用一维数组来实现。 顺序存储结构定义 描述顺序存储结构的线性表需要以下三个属性 1)存储空间的起始位置:数组data。它的存储位置就是存储空间的存储位置 2…

L1正则化的数学公式

L1正则化是机器学习和统计学中常用的正则化技术,用于控制模型的复杂度并防止过拟合。它们的数学表达如下: L1正则化(也称为Lasso正则化):在损失函数中添加模型参数的绝对值之和作为正则化项。其数学公式如下所示&…

利用地图资源工具让Sentinel-2自动生成NDVI\EVI

新版地图资源工具已经能自动计算EVI了,也就是现在工具可以自动计算NDVI、EVI及做哨兵L1C数据的自动预处理!只要勾选如下选项后数据下载的同时会自动生成NDVI、EVI! 归一化差异植被指数 (NDVI) 由于植被在近红外波段处有较强的反射&#…

Training - PyTorch Lightning 的 Horovod 策略实践 (all_gather)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137686312 在 PyTorch Lightning 中使用 Horovod 策略,可以在多个 GPU 上并行训练模型。Horovod 是分布式训练框架&#xff…

Oladance、南卡、漫步者开放式耳机好不好用?3大当红明星产品测评PK

​在音频市场中,开放式耳机以其创新设计和卓越听感赢得了一定的关注。然而,也存在一些产品质量和音质不尽人意,甚至可能影响用户听力安全。作为一名专业的音频设备评测师,我建议用户在选择开放式耳机时,应优先选择那些…

《R语言与农业数据统计分析及建模》学习——控制流

1、控制流的概念和作用 控制流是指根据循环或条件来控制程序的执行顺序和逻辑。 2、循环语句 循环语句允许程序重复执行特定的代码块,知道满足特定条件。 在R语言中,常见的循环语句有for、while和repeat。 # for循环用于在已知次数的情况下重复执行代码…

磁盘的管理

会在linux中使用硬盘 分区 格式化(重新安装文件系统) 挂载 硬盘的分类 1.机械硬盘 2.固态硬盘 硬盘的数据结构 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的 数据 (扇区越多容量越大) 存放数据的…

2024.4.13 Python 爬虫复习day01

目录 day01_HTTP协议HTML页面web服务器 各类名词解释 URL统一资源定位符 HTTP协议 HTML页面 知识点: 第一个页面 标题标签和图片标签 注册页面 登录页面 WEB服务器 安装fastapi和uvicorn 原始命令方式 镜像源命令方式 工具方式 快速搭建web服务器 知识点: 示例…

openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置

文章目录 openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置266.1 查看当前数据盘的文件系统类型266.2 对于需要修改的磁盘,备份所需的数据至其他磁盘或其他服务器266.3 格式化磁盘为xfs文件系统266.4 执行**步骤一** openGauss学习笔记-…

你见过哪些目瞪口呆的 Java 代码技巧?

自从毕业后,今年已经是我工作的第 8 个年头了,我甚至都快忘记了到底是那年毕业的。从出来本人一直在做 Java 相关的工作,现在终于有时间坐下来,写一篇关于 Java 写法的一篇文章,来探讨一下如果你真的是一个 Java 程序员…

[Leetcode]用队列实现栈

1.用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回…

C语言和JAVA语言的语法小区别

学习记录 记录一些学习过程的,防止后续遗忘,方便回顾 文章目录 学习记录一、数据类型二、标识符三、流程控制语句四、输入输出五、switch语句六、数组 一、数据类型 C语言 基本数据类型: 整型:short(2B)…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU+外部etcd使用containerd部署K8S 1.26.15容器版集群(多主多从)》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本,出现了一个问题,就是在pod中访问百度网站,大…