基于向量数据库搭建自己的搜索引擎

本文介绍了如何在Windows上搭建环境,包括Python3.9、Git、Docker等,然后使用Milvus搭建向量数据库,集成新闻数据集并通过HuggingFace模型进行搜索。步骤详细,适合初学者入门。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言【基于chatbot】

厌倦了商业搜索引擎搜索引擎没完没了的广告,很多时候,只是需要精准高效地检索信息,而不是和商业广告“斗智斗勇”。以前主要是借助爬虫工具,而随着技术的进步,现在有了更多更方便的解决方案,向量数据库就是其中之一【chatGPT也需要它的支撑】。

环境搭建【工作环境为windows10,数据库环境为centos7】

1. 安装python3.9【具体参考以下文章】

零基础小白安装python开发环境

2. 安装git【网上教程太多了,就不写了。有需要的可以留言】

3. 安装docker和docker-compose【网上教程太多了,就不写了。有需要的可以留言】

4. 安装milvus

在centos系统中,执行以下命令

wget https://github.com/milvus-io/milvus/releases/download/v2.2.11/milvus-standalone-docker-compose.yml -O docker-compose.yml

启动向量数据库

sudo docker-compose up -d 【-d是后台启动,第一次启动可以不加,有报错的话直接在命令行能看到】

ip和端口号,根据自己的实际情况做调整

图片

下载代码

git clone https://github.com/gitksqc/chatbot.git

安装python虚拟环境

python -m venv venvtest

安装模块

 # 配置国内镜像 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 命令行进入到代码所在目录 pip install -r requirements.txt

准备数据集【可以自己用爬虫做数据集】

# 我这里选的是新闻数据集做测试,可以根据自己情况选择https://www.kaggle.com/datasets/ceshine/yet-another-chinese-news-dataset

下载模型​​​​​​​

# 需要合理的上网工具,将模型及配置文件拷贝到项目根目录下的shibing624/text2vec-base-chinese目录中https://huggingface.co/shibing624/text2vec-base-chinese

图片

导入数据​​​​​​​

# 将下载的新闻数据集拷贝到项目根目录下news_collection.csv# 在项目根目录下执行insert.py脚本,等待执行结束python insert.py

运行项目​​​​​​​

# 激活虚拟环境.\venvtest\Scripts\Activate.ps1
# 启动服务 uvicorn main:app --reload

搜索

  1. 打开浏览器 访问http://127.0.0.1:8000【端口号可以自己在代码中设置】

    图片

  2. 输入要搜索的文字,点击搜索【页面没有做排版,主要演示功能】

    图片

到此就结束了,有问题可以留言或私信。

### 构建基于向量数据库的高效图像搜索引擎 构建基于向量数据库的高效图像搜索引擎是一项复杂而有意义的任务。以下是关于该主题的关键点: #### 图像搜索引擎的核心原理 图像搜索引擎依赖于将图像转换为高维特征向量的能力,这些向量可以被存储到向量数据库中以便快速检索相似项。这一过程涉及多个关键技术环节,包括但不限于深度学习模型的选择、特征提取方法以及向量索引算法的设计。 通过使用卷积神经网络(CNNs)或其他先进的机器学习架构,可以从原始图片中抽取语义丰富的特征表示[^1]。随后,这些特征会被规范化成固定长度的浮点数数组——即所谓的嵌入(embedding),再存入专为此类数据优化过的向量数据库里[^2]。 #### 技术实现流程概述 为了具体说明如何利用现有工具搭建这样一个系统,这里以Marqo为例展开讨论。Marqo 是一款支持多模态查询处理的开源解决方案,在其中集成了针对文本及多媒体资料的有效管理和分析能力[^3]。 ##### 数据预处理阶段 - **准备训练好的模型**:选取适合目标应用场景需求的预训练 CNN 或其他类型的编码器; - **批量计算 embeddings** :对于每张待入库的照片调用选定框架完成前馈操作从而获得对应 embedding 值; ##### 存储与管理部分 一旦获取到了所有样本对应的数值表达形式之后,则需考虑怎样妥善保存它们以便后续访问。此时便轮到诸如 Milvus/Zilliz Cloud 这样的专用型 NoSQL 解决方案登场了。这类平台提供了灵活易用 API 接口的同时也兼顾性能表现优异的特点,非常适合用来承载大规模分布式环境下的矢量化资产集合。 当新请求到达服务器端时,按照相同逻辑再次生成 query 的 embeding 并提交给底层引擎执行近似查找任务即可返回匹配度最高的若干候选项列表供前端展示出来。 ```python import marqo mq = marqo.Client(url='http://localhost:8882') def add_images_to_index(image_paths): docs = [{"_id": str(i), "image_field": path} for i, path in enumerate(image_paths)] mq.index("my-index").add_documents(docs) def search_image(query_vector): results = mq.index("my-index").search( {"tensor": query_vector}, searchable_attributes=["image_field"] ) return results["hits"] # Example usage add_images_to_index(["/path/to/image1.jpg", "/path/to/image2.png"]) query_vec = generate_embedding_for_query() # Assume this function exists. similar_images = search_image(query_vec) print(similar_images) ``` 以上代码片段展示了如何借助 Marqo 来简化整个工作流中的几个重要步骤。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值