跳到主要内容

构造器 API

查询操作

构造器生成 Elasticsearch Query DSL。计算列或聚合通过 applySelect 传入 DSL,而不是 SQL 函数。例如统计匹配记录数:

lambda.query(UserInfo.class)
.applySelect("{\"aggs\":{\"count\":{\"filter\":{\"match_all\":{}}}}}")
.queryForMapList();

字段选择及结果读取见查询操作

分页查询

普通查询使用 fromsize;总数使用独立计数请求。构造器不会自动将深分页改为 Scroll 或 search_after

分组查询使用 composite 聚合并通过 after_key 翻页。分页范围、总数含义与用法见分页查询

条件构造器

eq 生成的匹配条件仍受字段 mapping 影响。保存需要精确匹配的业务标识时使用 keyword,不要将分词的 text 字段当成普通字符串等值比较。

NOT IN 中的 null 不具有 SQL 三值逻辑。需要排除指定年龄及空值时,移除输入集合中的 null,并明确使用 isNotNull

lambda.query(UserInfo.class)
.notIn(UserInfo::getAge, List.of(20))
.isNotNull(UserInfo::getAge)
.queryForList();

条件参数

textkeyword 没有 VARCHAR(100) 那样的写入长度约束。长字符串会完整保存到 _source,构造器不会截断或校验长度。

ignore_above 影响索引,不等于拒绝写入。业务需要限制长度时,在写入前校验。

分组

groupBy 对应 Elasticsearch 聚合,applySelect 中也必须使用聚合 DSL,不能写 SQL 的 SUM(age)。例如按年龄分组计数:

lambda.query(UserInfo.class)
.applySelect("{\"aggs\":{\"cnt\":{\"filter\":{\"match_all\":{}}}}}")
.groupBy("age")
.queryForMapList();

分组字段应可用于聚合,例如数值字段或 keyword 字段。