AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


RAG 向量数据库:掌握 Elasticsearch 作为向量数据库的终极指南
发布日期:2024-08-07 08:35:52 浏览次数: 1708


在不断发展的数据管理环境中,Elasticsearch 已成为一个突出的参与者,通过其向量数据库引入了突破性的功能,为数据搜索和检索领域带来的变革性影响。

从本质上讲,Elasticsearch 的向量数据库是一种尖端解决方案,旨在利用向量嵌入的潜力实现高效且可扩展的搜索操作。

Elasticsearch Vector DB是一种先进的数据存储和检索技术,它结合了Elasticsearch的全文搜索功能和向量搜索的能力。通过将数据表示为向量,Elasticsearch Vector DB能够高效处理和查询复杂的非结构化数据,如文本、图像和音频。

每个向量嵌入之间的距离使 Elasticsearch 的向量数据库能够确定相似性,从而促进索引、距离指标和相似性搜索。这种向量化的方式使其特别适用于自然语言处理(NLP)、推荐系统和相似性搜索等应用场景,从而提供更快速和精确的搜索体验。

在本地机器上设置一个单节点的 Elasticsearch 集群,可以帮助你理解其基本配置和运行方式。

Pull the docker images. 拉取 docker 镜像。

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2docker pull docker.elastic.co/kibana/kibana:8.12.2

启动 Elasticsearch 和 Kibana 容器。

docker network create elastic
docker run -d --name elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -m 1GB -e "discovery.type=single-node" -e "ELASTIC_PASSWORD=passw0rd" docker.elastic.co/elasticsearch/elasticsearch:8.12.2
docker run -d --name kibana --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.12.2

验证容器是否已启动并正在运行。

docker ps
CONTAINER ID IMAGECOMMANDCREATED STATUS PORTSNAMESe288f61740da docker.elastic.co/kibana/kibana:8.12.2 "/bin/tini -- /usr/l…" About an hour ago Up About an hour 0.0.0.0:5601->5601/tcp kibana16e62f66f4e0 docker.elastic.co/elasticsearch/elasticsearch:8.12.2 "/bin/tini -- /usr/l…" About an hour ago Up About an hour 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch

现在,让我们创建“电影”索引。我们将使用 text-embedding-3-small 模型来生成标题字段的向量嵌入并将其存储为 title_embedding。此模型生成长度为 1536 的嵌入。因此,我们需要将title_embedding字段映射指定为 dense_vector,具有 1536 个维度。

PUT /movies{"mappings": {"properties": {"title": {"type": "text"},"genre": {"type": "keyword"},"release_year": {"type": "integer"},"title_embedding": {"type": "dense_vector","dims": 1536}}}}

让我们使用 Elasticsearch Python 客户端插入一些文档。Python 客户端需要“ssl_assert_fingerprint”才能连接到 Elasticsearch。让我们使用以下命令来获取它:

openssl s_client -connect localhost:9200 -servername localhost -showcerts </dev/null 2>/dev/null \| openssl x509 -fingerprint -sha256 -noout -in /dev/stdin
sha256 Fingerprint=AA:BB:CC:3C:A4:99:12:A8:D6:41:B7:A6:52:ED:CA:2E:0E:64:E2:0E:A7:8F:AE:4C:57:0E:4B:A3:00:11:22:33

现在我们可以在电影索引中插入一些文档。

from elasticsearch import Elasticsearchfrom openai import OpenAI
es_client = Elasticsearch("https://localhost:9200",ssl_assert_fingerprint='AA:BB:CC:3C:A4:99:12:A8:D6:41:B7:A6:52:ED:CA:2E:0E:64:E2:0E:A7:8F:AE:4C:57:0E:4B:A3:00:11:22:33',basic_auth=("elastic", "passw0rd"))openai_client = OpenAI(api_key='<openAI-API-key>')
movies = [{"title": "Inception", "genre": "Sci-Fi", "release_year": 2010},{"title": "The Shawshank Redemption", "genre": "Drama", "release_year": 1994},{"title": "The Godfather", "genre": "Crime", "release_year": 1972},{"title": "Pulp Fiction", "genre": "Crime", "release_year": 1994},{"title": "Forrest Gump", "genre": "Drama", "release_year": 1994}]
# Indexing moviesfor movie in movies:movie['title_embedding'] = openai_client.embeddings.create(input=[movie['title']], model='text-embedding-3-small').data[0].embeddinges_client.index(index="movies", document=movie)

比方说,我们想搜索与标题《教父》非常匹配的电影。我们可以使用 K-最近邻 (KNN) 算法来搜索相关文档。我们将限制搜索,仅显示 1 个最接近的匹配结果。

首先,我们需要获取单词 Godfather 的向量表示:

vector_value = openai_client.embeddings.create(input=["Godfather"], model='text-embedding-3-small').data[0].embedding

现在我们可以搜索电影索引,获取与片名《教父》非常匹配的电影。在我们的例子中,它应该将电影文档与标题《教父》匹配。

query_string = {"field": "title_embedding","query_vector": vector_value,"k": 1,"num_candidates": 100}
results = es_client.search(index="movies", knn=query_string, source_includes=["title", "genre", "release_year"])
print(results['hits']['hits'])

结果如下:

[{"_index": "movies","_id": "XvDTV44BCOE-aWDhxeQK","_score": 0.8956262,"_source":{"title": "The Godfather","genre": "Crime","release_year": 1972}}]

Elasticsearch 作为向量数据库具有重要的价值和意义,同时展现出广阔的未来趋势。

首先,它在处理相似性搜索方面表现出色。通过将文本、图像和音频等数据向量化,Elasticsearch 能够高效地进行相似性匹配和查询,这在自然语言处理(NLP)、推荐系统和图像识别等领域尤为重要。

此外,向量数据库结合了传统全文搜索和现代向量搜索的优点,提供了更精准和快速的搜索体验,提升了用户的满意度和业务的竞争力。

Elasticsearch 的扩展性和分布式架构使其能够处理大规模数据,支持实时数据处理和分析。这对于需要处理大量非结构化数据的应用场景,如社交媒体分析和用户行为分析,具有重要意义。其开放源代码和活跃的社区支持也为开发者提供了丰富的资源和工具,加速了技术的普及和创新。

未来,随着AI和机器学习技术的不断发展,向量数据库的需求将持续增长。Elasticsearch 将继续在这一领域发挥关键作用,提供更加智能和高效的数据管理解决方案。特别是在个性化推荐、语义搜索和自动化客户服务等方面,Elasticsearch 的应用前景非常广阔。通过不断优化和创新,Elasticsearch 作为向量数据库将进一步推动数据驱动的业务转型和技术进步。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询