Sign In
Free Sign Up
  • English
  • Español
  • 简体中文
  • Deutsch
  • 日本語
Sign In
Free Sign Up
  • English
  • Español
  • 简体中文
  • Deutsch
  • 日本語

使用 MyScale 进行过滤:当 SQL WHERE 遇到向量搜索

向量数据库在数十亿条记录中存储的相似对象上提供了快速检索。但是,您可能还对搜索与特定条件匹配的相关对象感兴趣,这称为过滤向量搜索。借助 MyScale (opens new window) 的帮助,您可以将过滤向量搜索提升到一个新的水平。

大多数向量索引或向量存储作为专用索引服务工作。它们支持 MongoDB 查询和投影运算符 (opens new window)的部分过滤向量搜索实现,您可以输入条件的字典。

不同的实现支持的数据类型和比较器不同,但大多数接口仅支持字符串、整数的相等和基本值比较。与数据库不同,这些向量索引并不设计用于处理复杂的数据类型和条件。因此,您需要一个外部数据库解决方案来存储这些数据,但不能使用这些数据执行过滤向量搜索。这个解决方案虽然可行,但很复杂且有限制。

实际上,应该有一个更好的解决方案。向量搜索可以与数据库集成,使其比现在更强大。MyScale 可以同时处理带有复杂条件和数据类型的过滤向量搜索,使用标准的 WHERE 子句。

# 前过滤和后过滤

过滤向量搜索实现可以分为两种类型:

  1. 前过滤向量搜索
  2. 后过滤向量搜索

例如:

假设您有一个包含用户 Jack、Jan 和 John 的聊天记录的表,并且您想使用过滤向量搜索查询来检索与给定查询向量相似的 Jack 的聊天记录。

NOTE

每条记录都有一个用户标记和特征向量,为简单起见,我们将向量转换为数字。

下图描述了 NoSQL 和 SQL 查询检索 Jack 的聊天记录:

这两个查询都包含对用户 Jack 的过滤器。但是,这个过滤器的结构可能因实现而异。

1. 前过滤向量搜索: 对于前过滤向量搜索,引擎将首先扫描数据,并仅保留与给定过滤条件匹配的记录。完成此扫描后,引擎将在前过滤的候选记录上执行向量搜索。

2. 后过滤向量搜索: 另一方面,后过滤向量搜索将首先执行向量搜索,然后根据给定的过滤条件对这些结果进行过滤。

前过滤和后过滤

在这两种方法之间,前过滤优于后过滤,准确性符合我们对过滤向量搜索的期望。大多数向量数据库支持带有向量搜索的前过滤。然而,这种前过滤并非免费,增加了计算量并拖慢了过滤向量搜索的性能。大多数实现都受到性能或过滤器限制的影响,例如数据存储和支持的比较器限制。

MyScale 使用从ClickHouse MergeTree 引擎 (opens new window)改编的基于列的存储引擎 (opens new window),在常规过滤器上超快,显著提高了第一阶段过滤,并使过滤向量搜索比其他实现更快。此外,您可以使用简单的 SQLWHERE子句在表中的任何列上定义过滤器。

# MyScale 中 WHERE 子句的用途

由于 MyScale 是在 ClickHouse (opens new window) 之上开发的,它提供与 ClickHouse 完全相同的功能。

例如:

方法 其他 MyScale
eq / neq
ge / gt / lt / le
include / exclude
带有字符串模式匹配 LIKE
时间戳/地理数据/JSON
带有函数
带有arrayFunction (opens new window)
带有子查询

让我们看一些突出 MyScale 的 WHERE 子句能够做什么的示例。

NOTE

您可以在我们的 Colab 或 GitHub 空间中找到这些示例的代码。

NOTE

有关数据类型和函数的更多信息,请参阅 ClickHouse 的官方文档 (opens new window)

# 常见值比较:=,!=,>,<,>=,<=

大多数向量索引解决方案支持对字符串或数字进行这些操作。在 MyScale 中,您可以使用以下方式编写值比较:

WHERE column = value

其中,column 可以是表中的任何列名,operation 可以是=,!=,>,<,>=,<=中的任何一个。

NOTE

列类型和值必须相同。

如果您有多个条件要添加到 WHERE 子句中,请使用逻辑运算符如 AND 将它们连接起来:

WHERE column_1 = value_1 AND column_2 >= value_2

# 常见集合运算符:包含,排除

MyScale 还支持集合操作,如 INNOT IN

WHERE column IN (value_1, value_2, ...)

当您想选择一组行时,这很有用。类似地,您可以使用逻辑运算符将这些集合运算符与其他条件连接起来。

# 数组运算符

您可以使用 has 函数检查元素是否在数组中:

WHERE has(column, value_1)

# 字符串模式匹配

您可以使用关键字 LIKE 在 MyScale 中进行字符串模式匹配:

WHERE column_1 LIKE '%value%'

此条件匹配在 column_1 中包含 value 的值。这种字符串模式匹配运算符是 MySQL 提供的众多运算符之一。其他运算符包括:NOT LIKE,使用正则表达式的 matchngramSearch

NOTE

有关 LIKE 运算符的更多信息,请参阅 ClickHouse 的官方文档 (opens new window)

Boost Your AI App Efficiency now
Sign up for free to benefit from 150+ QPS with 5,000,000 vectors
Free Trial
Explore our product

# 日期时间比较

MyScale 还包括一个日期时间比较函数:

WHERE dateDiff('hour', column_datetime, toDateTime('2018-01-02 23:00:00')) >= 25;

这个 WHERE 子句指的是任何 column_datetime 晚于给定日期时间超过 25 小时的行。此函数还支持秒、分钟、天和月。

NOTE

有关更多信息,请参阅这里 (opens new window)

# 地理数据比较

MyScale 可以处理 H3 Index (opens new window)S2 Geometry (opens new window),这是用于路径规划和几何分析的强大工具。

例如,使用 H3 Index,您可以使用六边形的面积来过滤给定区域内的地理数据:

WHERE h3CellAreaM2(column_h3) > 1000

您还可以添加到特定 H3 Index 的距离:

WHERE h3Distance(column_h3, value_h3) > 10

# JSON 列中的任意对象

MyScale 允许您将 JSON 作为对象存储,并根据其属性进行过滤。

您可以使用 JSON 数据类型将 JSON 字符串导入表中,并使用以下 WHERE 子句过滤结果:

WHERE column_json.attr_1 = value_1

您还可以按如下方式对嵌套属性进行过滤:

WHERE column_json.attr_1.attr_2 = value_1

尽管这是一个实验性功能 (opens new window),但它非常强大。我们在我们的LangChain (opens new window)LlamaIndex (opens new window)向量存储实现中使用了这些对象。

# 值函数

MyScale 包括许多列数据处理函数,您可以在 WHERE 子句中使用这些函数,例如:

WHERE abs(column_1) > 5

您可以在 WHERE 子句中包含多个列:

WHERE column_1 + column_2 + column_3 > 10

# 数组函数

数组函数非常强大,特别是在我们的向量搜索中。在我们的文档 (opens new window)中,我们介绍了 MyScale 中用于最终 logit 计算和梯度计算的数组函数,用于我们的 few-shot 分类器。

ClickHouse 在数组函数方面有很好的文档 (opens new window)

NOTE

如果您仍然需要关于 MyScale 中的数组函数的帮助,请加入我们的 discord (opens new window) 并提问。

# 子查询支持

子查询是查询中的查询。您还可以使用另一个 SELECT 查询编写带有 WHERE 子句的 WHERE 子句,如下所示:

WHERE column_1 IN (SELECT ... FROM another_table WHERE ...)
Join Our Newsletter

# 过滤向量搜索性能

准确性基准

我们在 vector-db-benchmark (opens new window) 中调查了过滤向量搜索性能。我们使用了laion-768-5m-ip-probability,其中在查询期间添加了一个随机浮点数作为其过滤标记。我们还对 MyScale 进行了与其他流行的向量数据库解决方案的测试。如下图所示,MyScale 在准确性和吞吐量方面超过了大多数其他向量数据库解决方案。

成本效益基准

此外,当准确性>=90% 时,MyScale 实现了所有经过测试的向量数据库中最佳的成本效益。与其他 SQL 集成的向量数据库(如 pgvector 和 pgvector.rs)相比,MyScale 是唯一一个实现了生产就绪的准确性和吞吐量的 SQL 和向量集成数据库。

NOTE

有关更多信息,请参阅以下博客比较 pgvector 和 MyScale (opens new window)

总之,MyScale 在更低的成本下提供了更高的准确性和吞吐量。在我们的产品线中的 s1 pod 中,我们还支持 500 万个向量,具有更多的数据类型和函数,对所有注册用户免费开放。

# 结论

过滤搜索是向量数据库中常见的一种查询类型,它允许您根据特定的条件或过滤器搜索相似的向量或数据点,特别是在处理可以表示为向量的数据时,如文本和图像嵌入或其他结构化数据。

MyScale 将 SQL 的强大功能嵌入到 AI 技术中,过滤搜索就是一个例子,为向量数据库提供了更复杂和灵活的查询能力。通过结合 AI 和 SQL,您可以执行复杂的数据操作和搜索,从而更轻松地提取有价值的见解,发现模式并执行不同的分析任务。

如果您对 SQL 如何提升您的 AI 应用程序感兴趣,请立即加入我们的 discord (opens new window)X (opens new window)

Keep Reading
images
初学者的Agentic RAG 指南

大型语言模型 (LLMs) 革新了我们获取和理解信息的方式。这些先进的 AI 系统经过大量数据的训练,使它们能够识别语言中的模式和意义。通过理解上下文中的单词,它们使探索想法、学习新事物和快速高效地找到答案变得更加容易。 LLM 正在塑造我们日常生活中与信息互动和使用的新时代。 早期的传统 LLM 完全依赖于其静态训练数据中提供的知识。这一局限性常常导致幻觉,即模型由于数据过时或不完整而 ...

images
OpenAI的CLIP模型的零样本分类

传统的图像分类模型,如卷积神经网络(CNN),多年来一直是计算机视觉任务的基石。这些模型通过在大型标记数据集上进行训练来运作,其中每个图像都与特定的类别标签相关联。通常,这些模型依赖于N-shot学习,这意味着它们需要大量标记图像(N个示例)来实现高准确性。 然而,这些传统模型面临着几个重要挑战。首先,它们需要大量标记数据,这在时间和成本上都是耗费的。此外,传统模型在泛化方面存在困难,特别是当示 ...

images
MyScale vs Weaviate:为您的AI应用选择合适的向量数据库

向量数据库正在兴起,其应用无处不在。它们具有超高的速度(想象一下在几分之一秒内搜索数十亿条记录),并且需要更少的资源(不需要任何GPU)。尽管如此,它们的性能出色,足以在公共卫生、金融和生物识别等领域使用。 现有许多向量数据库,其中MyScale是其中一个特殊的向量数据库,它是一种基于SQL的向量数据库。无论您是已经是向量数据库用户还是对它们还不熟悉,选择其中之一可能会很棘手;它取决于许多因素, ...

Start building your Al projects with MyScale today

Free Trial
Contact Us