• 过滤器
WHERE
WHERE
是一个 SQL 子句,用于全文本匹配和附加过滤。支持以下操作符:
支持 MATCH('query')
,它映射到 全文查询。
支持 {col_name | expr_alias} [NOT] IN @uservar
条件语法。请参阅 SET 语法了解全局用户变量的描述。
HTTP JSON
如果您更喜欢使用 HTTP JSON 接口,也可以进行过滤。虽然看起来比 SQL 更复杂,但在需要编程生成查询时,推荐使用这种方法,比如当用户在您的应用中填写表单时。
以下是 bool
查询中几个过滤器的示例。
这个全文查询匹配在任何字段中包含product
的所有文档。这些文档的价格必须大于或等于 500(gte
)且小于或等于 1000(lte
)。所有这些文档的修订版本都不能小于 15(lt
)。
bool 查询
bool
查询基于其他查询和/或过滤器的布尔组合匹配文档。查询和过滤器必须在 must
、should
或 must_not
部分中指定,并且可以嵌套。
must
在 must
部分中指定的查询和过滤器必须匹配文档。如果指定了多个全文查询或过滤器,它们必须全部匹配。这等同于 SQL 中的 AND
查询。请注意,如果要匹配数组(多值属性),可以多次指定该属性。只有在数组中找到所有查询的值,结果才会为正,例如:
另外,出于性能考虑,可能更适合使用:
(见下文详细说明)。
should
在 should
部分中指定的查询和过滤器应匹配文档。如果在 must
或 must_not
中指定了一些查询,则会忽略 should
查询。另一方面,如果除了 should
没有其他查询,那么至少其中一个查询必须匹配文档,文档才能匹配该 bool 查询。这等同于 SQL 中的 OR
查询。请注意,如果要匹配数组(多值属性),可以多次指定该属性,例如:
另外,出于性能考虑,可能更适合使用:
(见下文详细说明)。
must_not
在 must_not
部分中指定的查询和过滤器不能匹配文档。如果在 must_not
下指定了多个查询,文档如果都不匹配这些查询,则视为匹配。
嵌套布尔查询
一个布尔查询可以嵌套在另一个布尔查询中,从而构建更复杂的查询。要创建嵌套的布尔查询,只需在 must
、should
或 must_not
中使用另一个 bool
。以下是如何将此查询:
表示为JSON格式。
a = 2 and (a = 10 or b = 0)
更复杂的查询:
(a = 1 and b = 1) or (a = 10 and b = 2) or (b = 0)
SQL格式的查询
SQL格式的查询(query_string
)也可以用于布尔查询中。
各种过滤器
等式过滤器
等式过滤器是最简单的过滤器,适用于整数、浮点数和字符串属性。
equals
过滤器可以应用于多值属性,你可以使用:
any()
,当属性中至少有一个值等于查询值时,结果为正;all()
,当属性只有一个值且它等于查询值时,结果为正。
集合过滤器
集合过滤器检查属性值是否等于指定集合中的任意一个值。
集合过滤器支持整数、字符串和多值属性。
当应用于多值属性时,你可以使用:
any()
(等同于不使用函数),当属性值与查询值集中的至少一个匹配时,结果为正;all()
,当所有属性值都在查询值集中时,结果为正。
范围过滤器
范围过滤器匹配具有指定范围内属性值的文档。
范围过滤器支持以下属性:
gte
:大于或等于gt
:大于lte
:小于或等于lt
:小于
地理距离过滤器
geo_distance
过滤器用于筛选距离指定地理位置一定范围内的文档。
location_anchor
指定锚点位置,单位为度。距离是从这个点计算的。
location_source
指定包含纬度和经度的属性。
distance_type
指定距离计算函数。可以是 adaptive 或 haversine。adaptive 更快且更精确,详情请参阅 GEODIST()
。此选项为可选项,默认为 adaptive。
distance
指定与锚点位置的最大距离。在此距离内的所有文档都会匹配。距离可以以多种单位指定。如果没有指定单位,默认以米为单位。以下是支持的距离单位列表:
米:
m
或meters
千米:
km
或kilometers
厘米:
cm
或centimeters
毫米:
mm
或millimeters
英里:
mi
或miles
码:
yd
或yards
英尺:
ft
或feet
英寸:
in
或inch
海里:
NM
,nmi
或nauticalmiles
location_anchor
和 location_source
属性接受以下纬度/经度格式:
带有 lat 和 lon 键的对象:
{ "lat": "attr_lat", "lon": "attr_lon" }
具有以下结构的字符串:
"attr_lat, attr_lon"
以经度和纬度为顺序的数组:
[attr_lon, attr_lat]
纬度和经度的单位为度。
geo_distance
可以与布尔查询中的匹配查询或其他属性过滤器一起用作过滤器。
最后更新于