milvus和相似度检索

这篇具有很好参考价值的文章主要介绍了milvus和相似度检索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

流程

milvus的使用流程是 创建collection -> 创建partition -> 创建索引(如果需要检索) -> 插入数据 -> 检索
这里以Python为例, 使用的milvus版本为2.3.x
首先按照库, python3 -m pip install pymilvus

Connect

from pymilvus import connections
connections.connect(
  alias="default",
  user='username',
  password='password',
  host='localhost',
  port='19530'
)


connections.list_connections()
connections.get_connection_addr('default')

connections.disconnect("default")

milvus和相似度检索,vector-database,milvus,数据库
以上是源码,可以看出alias只是一个字典的映射的key

milvus和相似度检索,vector-database,milvus,数据库
通过源码可以看到,还有两种连接方式:

  1. 在.env文件中添加参数,MILVUS_URI=milvus://<Your_Host>:<Your_Port>,之后可以使用connections.connect()连接
  2. 在一次连接成功后,将连接配置数据保存在内存,下次近执行connections.connect()即可连接,可以通过connections.remove_connection删除连接配置数据

Database

from pymilvus import connections, db

conn = connections.connect(host="127.0.0.1", port=19530)

database = db.create_database("book")

db.using_database("book") # 切换数据库
db.list_database()
db.drop_database("book")

Collection

和一些非关系型数据库(MongoDB)类似,Collection就是表

# collection
from pymilvus import Collection, CollectionSchema, FieldSchema, DataType, utility

## 需要提前创建列的名称、类型等数据,并且必须添加一个主键
book_id = FieldSchema(
  name="book_id",
  dtype=DataType.INT64,
  is_primary=True,
)
book_name = FieldSchema(
  name="book_name",
  dtype=DataType.VARCHAR,
  max_length=200,
  # The default value will be used if this field is left empty during data inserts or upserts.
  # The data type of `default_value` must be the same as that specified in `dtype`.
  default_value="Unknown"
)
word_count = FieldSchema(
  name="word_count",
  dtype=DataType.INT64,
  # The default value will be used if this field is left empty during data inserts or upserts.
  # The data type of `default_value` must be the same as that specified in `dtype`.
  default_value=9999
)
book_intro = FieldSchema(
  name="book_intro",
  dtype=DataType.FLOAT_VECTOR,
  dim=2
)
# dim=2是向量的维度

schema = CollectionSchema(
  fields=[book_id, book_name, word_count, book_intro],
  description="Test book search",
  enable_dynamic_field=True
)


collection_name = "book"

collection = Collection(
    name=collection_name,
    schema=schema,
    using='default',
    shards_num=2
    )

utility.rename_collection("book", "lights4") 
utility.has_collection("lights1")
utility.list_collections()
# utility.drop_collection("lights")

collection = Collection("lights3")      
collection.load(replica_number=2)
# reduce memory usage
collection.release()

Partition

# Create a Partition

collection = Collection("book")      # Get an existing collection.
collection.create_partition("novel")

Index

milvus的索引决定了搜索所用的算法,必须设置好所引才能进行搜索。

# Index
index_params = {
  "metric_type":"L2",
  "index_type":"IVF_FLAT",
  "params":{"nlist":1024}
}

collection.create_index(
  field_name="book_intro", 
  index_params=index_params
)

## metric_type是相似性计算算法,可选的有以下
## For floating point vectors:
## L2 (Euclidean distance)
## IP (Inner product)
## COSINE (Cosine similarity)
## For binary vectors:
## JACCARD (Jaccard distance)
## HAMMING (Hamming distance)
utility.index_building_progress("<Your_Collection>")

Data

数据可以从dataFrame来,也可以从其他方式获得,只要列名对上,即可。

import pandas as pd
import numpy as np

insert_data = pd.read_csv("<Your_File>")
mr = collection.insert(insert_data)

Search

# search
search_params = {
    "metric_type": "L2", 
    "offset": 5, 
    "ignore_growing": False, 
    "params": {"nprobe": 10}
}

results = collection.search(
    data=[[0.1, 0.2]], 
    anns_field="book_intro", 
    # the sum of `offset` in `param` and `limit` 
    # should be less than 16384.
    param=search_params,
    limit=10,
    expr=None,
    # 这里需要将想看的列名列举出来
    output_fields=['title'],
    consistency_level="Strong"
)

# get the IDs of all returned hits
results[0].ids

# get the distances to the query vector from all returned hits
results[0].distances

# get the value of an output field specified in the search request.
hit = results[0][0]
hit.entity.get('title')

具体的代码在我的github。希望对你有所帮助!文章来源地址https://www.toymoban.com/news/detail-724562.html

到了这里,关于milvus和相似度检索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 向量检索库Milvus架构及数据处理流程

    搜索或推荐场景,需要将非结构化的物料(媒资)结构化,也即提取特征,然后将特征存储向量数据库,从而实现海量数据快速检索功能。 当前,开源市场比较火的搜索引擎有Faiss,但Faiss更类似于es的lucene,需要上层解决分布式水平扩容、数据一致性、高可用等问题。所以对

    2024年02月08日
    浏览(46)
  • 重磅消息!ChatGPT 联网,Milvus & Zilliz 正式嵌入用于向量检索!

    Zilliz 又双叒叕有好消息传来! 自 NVIDIA GTC Keynote 被黄老板点名后,Zilliz 又加入“大网红 OpenAI ”的朋友圈——作为首批受邀合作伙伴,向 ChatGPT 贡献了向量数据库插件,打通了知识召回与大型语言模型之间的桥梁! ChatGPT 联网,向量数据库已加入“团战” 今晨,Open AI 再次向

    2023年04月26日
    浏览(39)
  • OLAP引擎也能实现高性能向量检索,据说QPS高于milvus!

    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 随着LLM技术应用及落地,数据库需要提高向量分析以及AI支持能力,向量数据库及向量检索等能力“异军突起”,迎来业界持续不断关注。简单来说,向量检索技术以及向量数据库能

    2024年01月16日
    浏览(55)
  • 图书搜索领域重大突破!用Apache SeaTunnel、Milvus和OpenAI提高书名相似度搜索精准度和效率

    作者 | 刘广东,Apache SeaTunnel Committer 目前,现有的图书搜索解决方案(例如公共图书馆使用的解决方案)十分依赖于匹配,而不是对书名实际内容的语义理解。因此会导致搜索结果并不能很好地满足我们的需求,甚至与我们期待的结果大相径庭。这是因为仅仅依靠关键

    2024年02月11日
    浏览(40)
  • MySQL全文索引:中文语义分词检索(相似度匹配)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 通常情况下,全文检索引擎我们一般会用ES组件(传送门:SpringBoot系列——ElasticSearch),但不是所有业务都有那么大的数据量、那么大的并发要求,MySQL5.7之后内置

    2023年04月09日
    浏览(43)
  • es最大相似度检索(原生与java客户端)

    原生rest: 对“不好”进行分词, \\\"operator\\\": \\\"and\\\" 意思是同时满足。 结果: java RestHighLevelClient

    2024年02月11日
    浏览(50)
  • Transformers实战(二)快速入门文本相似度、检索式对话机器人

    文本匹配 是一个较为宽泛的概念,基本上只要涉及到两段文本之间关系的,都可以被看作是一种文本匹配的任务, 只是在具体的场景下,不同的任务对匹配二字的定义可能是存在差异的,具体的任务场景包括文本相似度计算、问答匹配、对话匹配、文本推理等等,另外,如

    2024年01月21日
    浏览(42)
  • RAG应用开发实战02-相似性检索的关键 - Embedding

    将整个文本转化为实数向量的技术。 Embedding优点是可将离散的词语或句子转化为连续的向量,就可用数学方法来处理词语或句子,捕捉到文本的语义信息,文本和文本的关系信息。 ◉ 优质的Embedding通常会让语义相似的文本在空间中彼此接* ◉ 优质的Embedding相似的语义关系可

    2024年04月14日
    浏览(51)
  • AIGC:【LLM(五)】——Faiss:高效的大规模相似度检索库

    1.1 什么是Faiss Faiss的全称是Facebook AI Similarity Search,是Facebook的AI团队针对大规模相似度检索问题开发的一个工具,使用C++编写,有python接口,对10亿量级的索引可以做到毫秒级检索的性能。 简单来说,Faiss的工作就是把我们自己的候选向量集封装成一个index数据库,它可以加速

    2024年02月13日
    浏览(43)
  • Docker Compose安装milvus向量数据库单机版-milvus基本操作

    以管理员身份运行powershell Ubuntu 22.04 LTS可以不装,wsl必须更新。。。 如果 操作超时 ,可以试试开代理。 重启电脑。。。 设置用户名、密码 https://hub.docker.com/ 重启电脑。。。 power shell输入以下命令,下载yaml文件到指定目录,并重命名为docker-compose.yml 或者 点击一下链接直接

    2024年01月19日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包