• 连接

警告:此功能处于测试阶段。请谨慎使用。

Manticore Search中的表连接允许您通过匹配相关列将两个表中的文档结合起来。此功能支持更复杂的查询,并增强了跨多个表的数据检索能力。

通用语法

SQL

SELECT
	select_expr [, select_expr] ...
	FROM tbl_name
	{INNER | LEFT} JOIN tbl2_name
	ON join_condition
	[...other select options]

join_condition: {
	left_table.attr = right_table.attr
	| left_table.json_attr.string_id = string(right_table.json_attr.string_id)
	| left_table.json_attr.int_id = int(right_table.json_attr.int_id)
}

有关选择选项的更多信息,请参阅 SELECT 部分。

当通过JSON属性的值进行连接时,您需要使用 int()string() 函数显式指定值的类型。

JSON

请注意,在使用JSON属性连接两个表时,left 操作数部分中有一个 type 字段。允许的值为 stringint

连接类型

Manticore Search 支持两种类型的连接:

  1. INNER JOIN:仅返回两个表中都有匹配项的行。例如,该查询在 orderscustomers 表之间执行一个 INNER JOIN,仅包含具有匹配客户的订单。

  1. LEFT JOIN:返回左表中的所有行以及右表中匹配的行。如果没有匹配项,则右表的列返回 NULL 值。例如,该查询使用 LEFT JOIN 检索所有客户及其对应的订单。如果没有对应的订单,则会显示 NULL 值。结果按照客户的电子邮件进行排序,并且只选择客户的姓名和订单数量。

带有分面功能的复杂连接

此查询从 orderscustomers 表中检索产品、客户姓名、产品价格和产品标签。它执行了一个 LEFT JOIN,确保即使客户没有下订单也会被包含在内。该查询过滤结果,仅包含价格大于 500 的订单,并将产品匹配为“laptop”、“phone”或“monitor”。结果按订单的 id 以升序排列。此外,查询还根据连接的 orders 表的 JSON 属性中的保修详情对结果进行分面处理。

注意事项和最佳实践

在 Manticore Search 中使用 JOIN 时,请注意以下几点:

  1. 字段选择:在 JOIN 中从两个表中选择字段时,不要为左表的字段加前缀,但要为右表的字段加前缀。例如:

  2. JOIN 条件:在 JOIN 条件中始终显式指定表名:

  3. 带有 JOIN 的表达式:当使用结合两个连接表字段的表达式时,给表达式的结果起别名:

  4. 对别名表达式进行过滤:在 WHERE 子句中,不能对涉及两个表字段的表达式别名进行过滤。

  5. 在 MVA 中使用 ANY:在 JOIN 中使用多值属性的 ANY() 函数时,为连接表中的多值属性起别名:

通过遵循这些指南,您可以有效地在 Manticore Search 中使用 JOIN 来结合多个索引的数据并执行复杂的查询。

最后更新于