本指南帮助你上手 Elasticsearch 键值存储。关于 ElasticsearchEmbeddingsCache 的全部功能与配置,请参阅 API 参考

Overview

ElasticsearchEmbeddingsCache 是一种 ByteStore 实现,会使用 Elasticsearch 实例高效存储和检索向量。

Integration details

ClassPackageLocalJS supportDownloadsVersion
ElasticsearchEmbeddingsCachelangchain-elasticsearchPyPI - DownloadsPyPI - Version

设置

需要先准备一个 Elasticsearch 集群,可本地部署或申请 Elastic Cloud

安装

该集成位于 langchain-elasticsearch 包:
pip install -qU langchain-elasticsearch

实例化

接下来创建 ByteStore:
from langchain_elasticsearch import ElasticsearchEmbeddingsCache

# Example config for a locally running Elasticsearch instance
kv_store = ElasticsearchEmbeddingsCache(
    es_url="https://localhost:9200",
    index_name="llm-chat-cache",
    metadata={"project": "my_chatgpt_project"},
    namespace="my_chatgpt_project",
    es_user="elastic",
    es_password="<GENERATED PASSWORD>",
    es_params={
        "ca_certs": "~/http_ca.crt",
    },
)

用法

使用 mset 写入:
kv_store.mset(
    [
        ["key1", b"value1"],
        ["key2", b"value2"],
    ]
)

kv_store.mget(
    [
        "key1",
        "key2",
    ]
)
[b'value1', b'value2']
使用 mdelete 删除:
kv_store.mdelete(
    [
        "key1",
        "key2",
    ]
)

kv_store.mget(
    [
        "key1",
        "key2",
    ]
)
[None, None]

用作向量缓存

与其他 ByteStore 一样,可在 RAG 场景下作为持久缓存。默认情况下缓存的向量不可检索,你可以通过继承并重写相关方法,为文档添加索引向量字段:
from typing import Any, Dict, List


class SearchableElasticsearchStore(ElasticsearchEmbeddingsCache):
    @property
    def mapping(self) -> Dict[str, Any]:
        mapping = super().mapping
        mapping["mappings"]["properties"]["vector"] = {
            "type": "dense_vector",
            "dims": 1536,
            "index": True,
            "similarity": "dot_product",
        }
        return mapping

    def build_document(self, llm_input: str, vector: List[float]) -> Dict[str, Any]:
        body = super().build_document(llm_input, vector)
        body["vector"] = vector
        return body
重写映射或文档构建时,请尽量在基础结构上“增补”而非替换。

API 参考

更多 ElasticsearchEmbeddingsCache 内容请参阅 API 参考
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.