首页 > 数据库 >向量数据库

向量数据库

时间:2023-07-11 16:48:06浏览次数:40  
标签:elastic 数据库 vector Elasticsearch https 搜索 向量

 

 

 

 

 


 

 

Elasticsearch 从 2022 年 2 月发布的 8.0 版本开始,提供了基于向量的搜索和自然语言处理(NLP)功能。

 

下图清楚地展示了向量搜索引擎的工作原理。它涉及以下几个步骤:

 

  • 将原始实体(如歌曲、图像或文本)转换为数字表示(向量 Embedding);

  • 使用距离度量来表示向量之间的相似性;

  • 使用近似最近邻算法(ANN)搜索与查询相关的数据。

 

 

向量搜索图

 

与 Apache Solr 类似,Elasticsearch 在内部也使用 Apache Lucene 作为其搜索引擎,因此许多底层概念、数据结构和算法同样适用于两者。

 

在这种情况下,基于向量的搜索是构建在 Apache Lucene HNSW(Hierarchical Navigable Small World graph)上的,也就是 Lucene 9 中的原生 ANN(近似最近邻)。

 

实施基于 Elasticsearch 的神经搜索的端到端流程如下:

 

  • 下载 Elasticsearch

  • 外部生成向量

  • 为向量搜索创建 Elasticsearch 索引

  • 索引文档

  • 利用向量字段进行搜索

 

Elastic 8.0 允许用户在 Elasticsearch 中使用自定义或第三方的基于 PyTorch 开发的语言模型进行推断,但需要 Platinum 或 Enterprise 订阅才能体验到完整的机器学习功能。

 

以下是自动从语料库创建向量 Embedding 的 Python 脚本:

 

https://github.com/SeaseLtd/vector-search-elastic-tutorial/blob/main/from_text_to_vectors/batch-sentence-transformers.py

 

案例 1 文档:

 

The presence of communication amid scientific minds was equally important to the success of the Manhattan Project as scientific intellect was. The only cloud hanging over the impressive achievement of the atomic researchers and engineers is what their success truly meant; hundreds of thousands of innocent lives obliterated.

 

它将输出一个包含相应向量的文件:

 

sys.argv[2] = “/path/to/vector_documents_10k.tsv”

 

案例 1 文档:

 

  •  
0.0367823,0.072423555,0.04770486,0.034890372,0.061810732,0.002282318,0.05258357,0.013747136,...,0.0054274425

 

 

接下来通过localhost的API创建索引
curl http://localhost:9200/neural_index/ -XPUT -H 'Content-Type: application/json' -d '{
"mappings": {
    "properties": {
        "general_text_vector": {
            "type": "dense_vector",
            "dims": 384,
            "index": true,
            "similarity": "cosine"
        },
        "general_text": {
            "type": "text"
        },
        "color": {
            "type": "text"
        }
    }
}}'

  

自动创建_bulk API 请求体的方法:

 

https://github.com/SeaseLtd/vector-search-elastic-tutorial/blob/main/indexing_phase/create_body_for_bulk.py

 

由于向量 Embedding 非常长,我们建议使用另一种方法来索引多个文档,即使用 Elasticsearch 的官方 Python 客户端 elasticsearch。

 

以下是我们用于一次性索引文档批次的自定义 Python 脚本:

 

https://github.com/SeaseLtd/vector-search-elastic-tutorial/blob/main/indexing_phase/indexer_elastic.py

 

总结

 

 

我们希望这个教程能帮助你了解如何在 Elasticsearch 中使用基于向量的搜索。

 

还有一些工作可以做,比如支持多值字段,改进重新排序以及与 BERT 和 Transformer 的整合。实际上,这是一个开放的 GitHub 问题 [4],他们正在进行 ANN 搜索的各种改进(包括新功能、增强功能、性能改进等)。

 

如果对你于密集向量的 Elasticsearch 基准测试感兴趣,你可以在这里 [5] 找到一些已发布的结果。

 

>>>>   

参考资料

【1】https://sease.io/wp-admin/post.php?post=56082&action=edit

【2】https://github.com/SeaseLtd/vector-search-elastic-tutorial

【3】https://msmarco.blob.core.windows.net/msmarcoranking/queries.tar.gz

【4】https://github.com/elastic/elasticsearch/issues/84324

【5】https://elasticsearch-benchmarks.elastic.co/#tracks/dense_vector/nightly/default/30d

 

标签:elastic,数据库,vector,Elasticsearch,https,搜索,向量
From: https://www.cnblogs.com/sddai/p/17545189.html

相关文章

  • MySQL数据库的介绍与安装
    版本的介绍版本的介绍MySQL5.0(版本不稳定)MySQL5.5(用的很少,老项目还再用)MySQL5.6(老项目用的比较多,版本很稳定)MySQL5.7(新项目在选择数据库的时候,使用的就是这个版本了)MySQL8.0(最新版本,现在生产环境用的还不是很多)MySQL的下载与安装官网地址:https://downloads......
  • sqlserver数据库清除备份集记录
    1、 通过维护计划清除备份集记录, SqlServer数据库备份到服务器,及删除           https://www.qyyshop.com/info/467759.html 通过维护计划删除没有的或者历史的记录.  ......
  • sqlserver数据库执行维护计划报错
    1、https://blog.csdn.net/Wu7z_/article/details/107506710?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-2-107506710-blog-119634976.235%5Ev38%5Epc_relevant_default_base&depth_1-u......
  • python pandas链接mysql数据库报错
    1. ModuleNotFoundError:Nomodulenamed'mysql'需要安装链接驱动,比如 pipinstallmysqlclient#或pipinstallpymysql#或pipinstallmysql-connector-python2.pandas的 pd.read_sql(ad_first_query,conn)报错: executereturnself.connectable.executio......
  • 达梦数据库&DBeaver
    DBeaver:https://dbeaver.io/download/达梦官网:https://eco.dameng.com/download/前提:数据库需要启动 链接步骤:1、打开DBeaver 2、数据库--->驱动管理器---->新建   3、新建数据库链接--->找到上面设置的驱动(可以搜索)4、输入链接需要的配置项     ......
  • mongodb3数据库操作
    Mongodb数据库操作一.默认数据库1.showdbs查看数据库admin库主要存储MongoDB的用户、角色等信息config库主要存储分片集群基础信息local库主要存储副本集的元数据test默认空数据库,无法查看2.amdin数据库syetem内容介绍system.version存储authSchema的版本信息system.users存储数据......
  • 限制Oracle数据库中字段长度规范及其限制(oracle中字段的长度)
    限制Oracle数据库中字段长度规范及其限制(oracle中字段的长度)原文链接:https://www.dbs724.com/276537.html在Oracle数据库中,字段长度规范和其限制是非常重要的,因为它们直接影响到数据库中存储的数据的完整性和可靠性。在本文中,我们将讨论如何限制Oracle数据库中的字段长度规范,以......
  • python之数据库MySQL
    数据的演变史#以ATM为例#1.把数据存放在单个文件里面 1.文件名不规范2.数据格式也不规范 kevin|123kevin$123kevin*123#2.软件目录开发规范 db文件夹里 #当数据量多的时候,会产生很多的文件,多次读取文件会占用大量的资源#3.数据库阶段 把数据......
  • 数据库mysql
    数据的演变史'''以ATM为例'''1.把数据存在了文件中文件名:user.txt、userinfo.txt数据格式:kevin|123、kevin@123、kevin!1232.软件开发目录规范db文件夹#专门用来存储数据文件,但是,当数据文件较多的时候,占用过多的资源,也会产生很多的文件......
  • 支持向量机学习笔记--实现篇(三)
    支持向量机学习笔记(三)前言两篇文章阐述了支持向量机的原理,在数学的海洋中遨游了快一周,实在撑不下去了,现在准备亲自来实现一把支持向量机的学习算法,序列最小最优化算法,依然需要数学知识和少量的编程基础。参考的书籍为李航的《统计学习方法》和PeterHarrington的《机器学习实战》,参......