Skip to main content

阿里云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,我们将尽力为您提供帮助和支持。