ClickHouse
仅在 Node.js 上可用。
¥Only available on Node.js.
ClickHouse 是一个强大的开源列式数据库,用于处理分析查询和高效存储。ClickHouse 旨在提供强大的向量搜索和分析组合。
¥ClickHouse is a robust and open-source columnar database that is used for handling analytical queries and efficient storage, ClickHouse is designed to provide a powerful combination of vector search and analytics.
设置
¥Setup
启动 ClickHouse 集群。有关详细信息,请参阅 ClickHouse 安装指南。
¥Launch a ClickHouse cluster. Refer to the ClickHouse Installation Guide for details.
启动 ClickHouse 集群后,从集群的
Actions
菜单检索Connection Details
。你需要主机、端口、用户名和密码。¥After launching a ClickHouse cluster, retrieve the
Connection Details
from the cluster'sActions
menu. You will need the host, port, username, and password.在你的工作区中安装 ClickHouse 所需的 Node.js 对等依赖。
¥Install the required Node.js peer dependency for ClickHouse in your workspace.
你需要安装以下对等依赖:
¥You will need to install the following peer dependencies:
- npm
- Yarn
- pnpm
npm install -S @clickhouse/client mysql2
yarn add @clickhouse/client mysql2
pnpm add @clickhouse/client mysql2
- npm
- Yarn
- pnpm
npm install @langchain/openai @langchain/community @langchain/core
yarn add @langchain/openai @langchain/community @langchain/core
pnpm add @langchain/openai @langchain/community @langchain/core
索引和查询文档
¥Index and Query Docs
import { ClickHouseStore } from "@langchain/community/vectorstores/clickhouse";
import { OpenAIEmbeddings } from "@langchain/openai";
// Initialize ClickHouse store from texts
const vectorStore = await ClickHouseStore.fromTexts(
["Hello world", "Bye bye", "hello nice world"],
[
{ id: 2, name: "2" },
{ id: 1, name: "1" },
{ id: 3, name: "3" },
],
new OpenAIEmbeddings(),
{
host: process.env.CLICKHOUSE_HOST || "localhost",
port: process.env.CLICKHOUSE_PORT || 8443,
username: process.env.CLICKHOUSE_USER || "username",
password: process.env.CLICKHOUSE_PASSWORD || "password",
database: process.env.CLICKHOUSE_DATABASE || "default",
table: process.env.CLICKHOUSE_TABLE || "vector_table",
}
);
// Sleep 1 second to ensure that the search occurs after the successful insertion of data.
// eslint-disable-next-line no-promise-executor-return
await new Promise((resolve) => setTimeout(resolve, 1000));
// Perform similarity search without filtering
const results = await vectorStore.similaritySearch("hello world", 1);
console.log(results);
// Perform similarity search with filtering
const filteredResults = await vectorStore.similaritySearch("hello world", 1, {
whereStr: "metadata.name = '1'",
});
console.log(filteredResults);
API Reference:
- ClickHouseStore from
@langchain/community/vectorstores/clickhouse
- OpenAIEmbeddings from
@langchain/openai
从现有集合中查询文档
¥Query Docs From an Existing Collection
import { ClickHouseStore } from "@langchain/community/vectorstores/clickhouse";
import { OpenAIEmbeddings } from "@langchain/openai";
// Initialize ClickHouse store
const vectorStore = await ClickHouseStore.fromExistingIndex(
new OpenAIEmbeddings(),
{
host: process.env.CLICKHOUSE_HOST || "localhost",
port: process.env.CLICKHOUSE_PORT || 8443,
username: process.env.CLICKHOUSE_USER || "username",
password: process.env.CLICKHOUSE_PASSWORD || "password",
database: process.env.CLICKHOUSE_DATABASE || "default",
table: process.env.CLICKHOUSE_TABLE || "vector_table",
}
);
// Sleep 1 second to ensure that the search occurs after the successful insertion of data.
// eslint-disable-next-line no-promise-executor-return
await new Promise((resolve) => setTimeout(resolve, 1000));
// Perform similarity search without filtering
const results = await vectorStore.similaritySearch("hello world", 1);
console.log(results);
// Perform similarity search with filtering
const filteredResults = await vectorStore.similaritySearch("hello world", 1, {
whereStr: "metadata.name = '1'",
});
console.log(filteredResults);
API Reference:
- ClickHouseStore from
@langchain/community/vectorstores/clickhouse
- OpenAIEmbeddings from
@langchain/openai
相关
¥Related
向量存储 概念指南
¥Vector store conceptual guide
向量存储 操作指南
¥Vector store how-to guides