Elasticsearch 向量相似搜索

Elasticsearch 向量相似搜索的原理涉及使用密集向量(dense vector)来表示文档,并通过余弦相似性度量来计算文档之间的相似性。以下是 Elasticsearch 向量相似搜索的基本原理:

  1. 向量表示文档

    • 文档的文本内容经过嵌入模型(如BERT、Word2Vec等)处理,得到一个密集向量(dense vector)表示文档的语义信息。
    • 这个向量通常具有数百至数千个维度,每个维度表示文档在语义空间中的某个特定方面。
  2. 向量存储到 Elasticsearch

    • 将文档的向量表示存储到 Elasticsearch 索引中,通常使用 dense_vector 类型的字段进行存储。
    • 在索引中,每个文档都有一个与之关联的密集向量。
  3. 查询向量表示

    • 当执行搜索查询时,将查询文本通过相同的嵌入模型转换为一个密集向量,表示查询的语义信息。
  4. 相似性计算

    • 使用余弦相似性度量计算查询向量与每个文档向量之间的相似性。
    • 余弦相似性度量衡量了两个向量之间的夹角,值在 -1 到 1 之间,越接近1表示相似性越高。
  5. 返回排序的结果

    • Elasticsearch 根据相似性得分对文档进行排序,将相似性高的文档排在前面。
    • 检索的结果包含与查询向量相似的文档,最相似的文档排在前面。
  6. 脚本评分(Script Score)

    • Elasticsearch 提供了脚本评分功能,可以使用脚本来定制相似性评分的计算方式。常见的是使用余弦相似性函数来计算评分。

具体的例子:

1. 安装 Elasticsearch 8.X, 如下是docker-compose.yml:

version: '2.2'
services:
  elasticsearch:
    container_name: es01
    image: docker.elastic.co/elasticsearch/elasticsearch:8.11.3
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
    ports:
      - "8088:9200"
    volumes:
      - ./elasticsearch-data:/usr/share/elasticsearch/data
    mem_limit: 2g

    networks:
      - my-network
    restart: always



networks:
  my-network:
    name: my-network-1

2.安装后测试一下Elasticsearch:
http://localhost:8088/_cat/health?v

3. 创建索引映射

在 Postman 中,使用 HTTP PUT 请求创建索引及其映射。假设您的 Elasticsearch 服务运行在 http://localhost:9200,创建名为 your_index 的索引:

发送请求以创建索引映射。

  • 请求类型:PUT

  • URL:http://localhost:9200/your_index

  • Body(选择 rawJSON (application/json)):

    {
      "mappings": {
        "properties": {
          "text": {
            "type": "text"
          },
          "embedding": {
            "type": "dense_vector",
            "dims": 768  // 替换为实际的嵌入向量维度
          }
        }
      }
    }
    

    4. 插入文档

    • 请求类型:POST

    • URL:http://localhost:9200/your_index/_doc/1

    • Body(选择 rawJSON (application/json)

    • {
        "text": "淄博新建的一座占地100亩的烧烤城在短短20天内建成,吸引了众多烧烤爱好者,如今“烤位”已是一位难求。",
        "embedding": [
      0.24153212,0.20880528,0.030148063,-0.53177595,-0.16311283,-0.48528185,0.8071734,-0.5603691,-0.034782775,-0.010840773,0.20591497,-0.190546,0.0939277,-0.31472996,0.41703156,-0.31428546,0.32904455,-0.1818271,0.0828045,0.2891722,-0.12507804,0.44376546,-0.10610913,0.2950189,0.34206498,0.54851073,0.33173296,-0.50768775,-0.22573504,0.09621267,1.1528952,-0.13125856,0.06805208,0.75444174,0.28983256,-0.058324914,0.029754816,0.28223705,0.017140139,-0.20847563,-0.3175143,-0.6432414,0.13734575,-0.34154043,-0.7852689,-0.7646187,-0.08415885,0.27589658,0.037415426,-0.111104995,-0.7493051,0.13488679,-0.0021623205,-0.4228744,-0.5692682,0.37095323,-0.17621705,-0.029115338,0.41395468,-0.36694804,-0.21973066,-0.0684685,-0.4107971,0.17953752,-0.6013466,0.4058221,0.088796705,0.39943227,-0.0005312811,-0.011339925,-0.20651253,0.113913804,0.0025909252,0.3519917,-0.34478262,0.45721626,-0.75878835,0.13280198,-0.09654277,0.5451904,-0.5389396,0.2736914,0.07034891,0.002583282,0.075424306,0.33698198,0.7679384,0.46068242,-0.08456434,0.5998018,0.2

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-6.0.0.62再使用微信3.9.5

在openSUSE-Leap-15.5-DVD-x86_64中使用deepin-wine-6.0.0.62再使用微信3.9.5 参考文章: 《记录-下fedora 33安装deepin qq和微信 ,不需要安装deepinwine》 https://tieba.baidu.com/p/7279470269 《opensuse使用virtualbox安装win10》 https://blog.c…

简便实用:在 ASP.NET Core 中实现 PDF 的加载与显示

前言 在Web应用开发中,经常需要实现PDF文件的加载和显示功能。本文小编将为您介绍如何在ASP.NET Core中实现这一功能,以便用户可以在Web应用中查看和浏览PDF文件。 实现步骤 1)在服务器端创建PDF 打开 Visual Studio 并创建新的 ASP. NET…

PDF转为图片

PDF转为图片 背景pdf展示目标效果 发展过程最终解决方案:python PDF转图片pdf2image注意:poppler 安装 背景 最近接了一项目,主要的需求就是本地的文联单位,需要做一个电子刊物阅览的网站,将民族的刊物发布到网站上供…

Apipost检测接口工具的基本使用方法

👀 今天言简意赅的介绍一款和postman一样好用的后端接口测试工具Apipost 专门用于测试后端接口的工具,可以生成接口使用文档官方下载网站:http://www.apipost.cn 傻瓜式安装—>register->项目->创建项目->APIs->新建目录&…

什么是 DDoS ?如何识别DDoS?怎么应对DDOS攻击

什么是DDOS攻击 DDoS攻击(Distributed Denial of Service Attack)即分布式拒绝服务攻击,是一种利用分布式网络来发起大量的请求,占用目标服务器或网络资源的攻击行为。这种攻击方式可以瘫痪目标系统,导致其无法正常提供…

springboot学习笔记(一)

本期内容: 1.springboot安装 2.springboot Hello world 1.springboot安装: 参考: springboot安装 Spring boot简介及安装 a. eclipse中打开help-->Eclipse Marketplace b. 在search栏目下,输入:spring-tool-…

Redis原理之网络模型笔记

目录 1. 阻塞IO 2. 非堵塞IO 3. IO多路复用 ​3.1 select 3.2 poll 3.3 epoll 4. 信号驱动IO 5. 异步IO 6. Redis是单线程还是多线程 Redis采用单线程模型,这意味着一个Redis服务器在任何时刻都只会处理一个请求。Redis的网络模型涉及到阻塞I/O(Blo…

一天吃透Redis面试八股文

目录: Redis是什么?Redis优缺点?Redis为什么这么快?讲讲Redis的线程模型?Redis应用场景有哪些?Memcached和Redis的区别?为什么要用 Redis 而不用 map/guava 做缓存?Redis 数据类型有哪些&…

java SpringCloud版本b2b2c鸿鹄云商平台全套解决方案

使用技术: Spring CloudSpring BootMybatis微服务服务监控可视化运营 B2B2C平台: 平台管理端(包含自营) 商家平台端(多商户入驻) PC买家端、手机wap/公众号买家端 微服务(30个通用微服务如:商品、订单、购物车、个人中心、支…

【笑小枫的按步照搬系列】Windows下安装RabbitMQ,图文完整教程

笑小枫的专属目录 1. RabbitMq简介1.1 消息队列中间件简介1.2 什么是RabbitMQ 2. 安装准备工具2.1 百度网盘下载2.2 官网下载erlang2.3 GitHub下载RabbitMQ 3. 安装步骤3.1 erlang安装3.1.1 安装步骤图文讲解3.1.2 环境变量配置图文讲解 3.2 RabbitMq安装3.2.1 解压zip文件到执…

【LeetCode刷题笔记】位运算

231. 2 的幂 解题思路: 1. 除法 , 不断循环判断, 如果能被 2 整除,就不断除以 2 ,直到不能被 2 整除为止,最后结果如果是 1 ,说明可以除尽,是 2 的幂次方,否则就不是。 特判:

北斗三号短报文户外应急产品及应用方案

我国幅员辽阔物产丰富,各大地区生产线都有工人日夜躬耕投入生产,然而与无人区、无网络区域作业人员通信一直是难以解决的技术问题;通信链路不稳定、通信不畅,通信距离短,无法与无人区人员进行实时沟通,对于…

RabbitMQ 如何保证消息可靠性

RabbitMQ 如何保证消息可靠性 1. 保证生产者可靠1.1 生产者确认机制1.2 实现生产者确认1.2.1 开启生产者确认机制1.2.2 定义ReturnCallback1.3.3.定义ConfirmCallback 1.3 注意 2. 保证MQ可靠2.1 数据持久化2.1.1 交换机持久化2.1.2.队列持久化2.1.3 消息持久化2.1.4 注意 3. 保…

引领半导体划片机行业,实现钛酸锶基片切割的卓越效能

在当今快速发展的半导体行业中,博捷芯以其卓越的技术实力和精准的行业应用,脱颖而出,再次引领行业潮流。这次,他们将先进的BJX3356划片机技术应用于钛酸锶基片的切割,为半导体制造行业的进一步发展提供了强大的技术支持…

mysql中的server_id到底有什么用?详解mysql配置中的server_id配置项

当我们搭建MySQL集群时,自然需要完成数据库的主从同步来保证数据一致性。而主从同步的方式也分很多种,一主多从、链式主从、多主多从,根据你的需要来进行设置。但只要你需要主从同步,就一定要注意server-id的配置,否则…

YOLOv5改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)

一、本文介绍 本文给大家带来的改进是Triplet Attention三重注意力机制。这个机制,它通过三个不同的视角来分析输入的数据,就好比三个人从不同的角度来观察同一幅画,然后共同决定哪些部分最值得注意。三重注意力机制的主要思想是在网络中引入…

Gitlab仓库推送到Gitee仓库的一种思路

文章目录 Gitlab仓库推送到Gitee仓库的一种思路1、创建Gitee的ssh公钥(默认已有Gitlab的ssh公钥)2、添加Gitlab远程仓库地址3、添加Gitee远程仓库地址4、拉取Gitlab远程仓库指定分支到本地仓库指定分支(以test分支为例)5、推送本地…

Elasticsearch的批量bulk 提交 写入的方式会有顺序问题吗?

Elasticsearch的分布式特性可能会导致写入操作的执行顺序与提交顺序稍有不同。在分布式环境中,Elasticsearch将数据分散到不同的节点上进行存储和处理,因此写入操作的执行顺序可能会受到网络延迟、负载均衡等因素的影响。 根源在于ES的分布式架构。如上图所示,客户端的命令首…

蓝桥杯嵌入式——KEY

CUBE里将这几个引脚配置成GPIO输入模式,再同时选中,配置成上拉,如下图: 同时配置定时器,定时10ms,每10ms扫描一次按键,计算公式:80 000 000 / 80 / 10000 100HZ 10ms,配…

C语言-第十六周课堂总结-数组

引用 先定义,后使用只能引用单个的数组元素,不能一次引用整个数组 int a[10]; 10个数组元素:a[0]、a[1]、…、a[9] 数组元素:数组名[下标] 下标:整形表达式 下标取值范围:[0,数组长度-1]数组元…