阿里云OpenSearch
阿里云OpenSearch是一个一站式平台,用于开发智能搜索服务。
OpenSearch
是由阿里巴巴
开发的大规模分布式搜索引擎构建的。OpenSearch
在阿里巴巴集团内部服务于500多个业务场景,并为阿里巴巴云的数千个客户提供服务。OpenSearch
帮助开发不同的搜索场景,包括电子商务、O2O、多媒体、内容行业、社区和论坛以及企业中的大数据查询。
OpenSearch
帮助您开发高质量、免维护和高性能的智能搜索服务,为用户提供高效和准确的搜索体验。
OpenSearch
提供了向量搜索功能。在特定场景下,特别是测试题搜索和图像搜索场景中,您可以将向量搜索功能与多模态搜索功能结合使用,以提高搜索结果的准确性。
本笔记本展示了如何使用与阿里云OpenSearch向量搜索版
相关的功能。
要运行,请确保已经启动并运行了一个OpenSearch向量搜索版实例:
阅读帮助文档以快速了解和配置OpenSearch向量搜索版实例。
实例启动后,请按照以下步骤拆分文档、获取嵌入、连接到阿里巴巴云OpenSearch实例、索引文档并执行向量检索。
首先,我们需要安装以下Python包。
#!pip install alibabacloud-ha3engine
我们想要使用OpenAIEmbeddings
,因此我们需要获取OpenAI API密钥。
import os
import getpass
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import (
AlibabaCloudOpenSearch,
AlibabaCloudOpenSearchSettings,
)
拆分文档并获取嵌入。
from langchain.document_loaders import TextLoader
loader = TextLoader("../../../state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()
创建OpenSearch设置。
settings = AlibabaCloudOpenSearchSettings(
endpoint="阿里云OpenSearch控制台中的实例端点",
instance_id="阿里云OpenSearch控制台中的实例标识",
datasource_name="创建数据源时指定的数据源名称",
username="购买实例时指定的用户名",
password="购买实例时指定的密码",
embedding_index_name="配置实例属性时指定的向量属性名称",
field_name_mapping={
"id": "id", # 索引文档的id字段名称映射。
"document": "document", # 索引文档的文本字段名称映射。
"embedding": "embedding", # 索引文档的嵌入字段名称映射。
"name_of_the_metadata_specified_during_search": "opensearch_metadata_field_name,=", # 索引文档的元数据字段名称映射,可以指定多个,值字段包含映射名称和运算符,运算符将在执行元数据过滤查询时使用。
},
)
# 例如
# settings = AlibabaCloudOpenSearchSettings(
# endpoint="ha-cn-5yd39d83c03.public.ha.aliyuncs.com",
# instance_id="ha-cn-5yd39d83c03",
# datasource_name="ha-cn-5yd39d83c03_test",
# username="this is a user name",
# password="this is a password",
# embedding_index_name="index_embedding",
# field_name_mapping={
# "id": "id",
# "document": "document",
# "embedding": "embedding",
# "metadata_a": "metadata_a,=" #值字段包含映射名称和运算符,运算符将在执行元数据过滤查询时使用
# "metadata_b": "metadata_b,>"
# "metadata_c": "metadata_c,<"
# "metadata_else": "metadata_else,="
# })
通过设置创建OpenSearch访问实例。
# 创建OpenSearch实例并索引文档。
opensearch = AlibabaCloudOpenSearch.from_texts(
texts=docs, embedding=embeddings, config=settings
)
或者
# 创建OpenSearch实例。
opensearch = AlibabaCloudOpenSearch(embedding=embeddings, config=settings)
添加文本并构建索引。
metadatas = {"md_key_a": "md_val_a", "md_key_b": "md_val_b"}
# metadatas的键必须与settings中的field_name_mapping匹配。
opensearch.add_texts(texts=docs, ids=[], metadatas=metadatas)
查询和检索数据。
query = "总统对Ketanji Brown Jackson有何评价"
docs = opensearch.similarity_search(query)
print(docs[0].page_content)
带元数据的查询和检索数据。
query = "总统对Ketanji Brown Jackson有何评价"
metadatas = {"md_key_a": "md_val_a"}
docs = opensearch.similarity_search(query, filter=metadatas)
print(docs[0].page_content)
如果在使用过程中遇到任何问题,请随时联系xingshaomin.xsm@alibaba-inc.com,我们将尽力为您提供帮助和支持。