Easy-Es Easy-Es
💋首页
  • v3.0.0(当前版本)
  • What's New

    • What' s New In Easy-Es v3.0.0?
  • 历史版本

    • v1.x.x
    • v2.x.x
  • 升级指南

    • 升级到3.x.x说明
💖赞助
  • 开源社区
  • 周边好物
  • 项目PPT (opens new window)
  • 项目介绍
  • 项目成员
  • 参与贡献
加入社区讨论
谁在使用
  • Doc-Apis (opens new window)
  • 健身计划一键生成系统 (opens new window)
  • 极氪汽车
  • Vuepress-theme-vdoing (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)
  • 简体中文 (opens new window)
  • English (opens new window)

广告采用随机轮播方式显示 ❤️成为赞助商
💋首页
  • v3.0.0(当前版本)
  • What's New

    • What' s New In Easy-Es v3.0.0?
  • 历史版本

    • v1.x.x
    • v2.x.x
  • 升级指南

    • 升级到3.x.x说明
💖赞助
  • 开源社区
  • 周边好物
  • 项目PPT (opens new window)
  • 项目介绍
  • 项目成员
  • 参与贡献
加入社区讨论
谁在使用
  • Doc-Apis (opens new window)
  • 健身计划一键生成系统 (opens new window)
  • 极氪汽车
  • Vuepress-theme-vdoing (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)
  • 简体中文 (opens new window)
  • English (opens new window)
  • 快速入门

    • 简介
    • 适用场景
    • 顾虑粉碎
    • 避坑指南
    • 快速开始
    • springboot集成demo
    • spring集成指南
    • solon集成指南
    • 配置
    • 注解
  • 核心功能

    • 条件构造器

      • 条件构造器介绍
      • 索引条件构造器
      • 查询条件构造器
        • LambdaEsQueryWrapper
          • allEq
          • eq
          • gt
          • ge
          • lt
          • le
          • between
          • like
          • likeLeft
          • likeRight
          • isNotNull
          • exists
          • in
          • groupBy
          • orderByDesc
          • limit
          • from
          • size
          • minScore
          • trackScores
          • index
        • and
        • or
        • filter
        • not
        • nested
      • 更新条件构造器
    • 索引CRUD

      • 索引托管模式
      • 索引CRUD
    • 数据CRUD

      • 数据同步方案
      • 数据CRUD
    • 多数据源支持
    • 动态索引支持
    • 四大嵌套查询
    • 链式调用
  • 拓展功能

    • 混合查询
    • 原生查询
    • 分页查询
    • 嵌套类型
    • Join父子类型
    • 获取DSL语句
    • 执行DSL语句
    • 执行SQL语句
    • 自定义RequestOptions
    • 自定义default方法
  • 高阶语法

    • 查询字段过滤
    • 排序
    • 聚合查询
    • 分词&模糊匹配
    • 权重
    • 高亮查询
    • GEO地理位置查询
    • IP查询
  • 插件

    • 插件
    • 领域模型生成插件
  • 其它

    • 问答
    • 与MP差异
    • MySQL和EE语法对比
    • 更新日志
    • 更新计划
    • 版权
    • 鸣谢
  • v2.x文档
  • 核心功能
  • 条件构造器
老汉
2023-03-18
目录

查询条件构造器

# LambdaEsQueryWrapper

提示

此条件构造器主要用于查询数据时所需查询条件的封装

# allEq

allEq(Map<R, V> params)

1
2

全部eq

个别参数说明

params : key为数据库字段名,value为字段值

  • 例: allEq({id:1,name:"老王",age:18})--->id = 1 and name = '老王' and age = 18
allEq(BiPredicate<R, V> filter, Map<R, V> params)

1
2

个别参数说明

filter : 过滤函数,是否允许字段传入比对条件中 params 与 null2IsNull : 同上

  • 例: allEq((k,v) -> k.indexOf("a") >= 0, {id:1,name:"老王",age:18})--->name = '老王' and age = 18

# eq

eq(R column, Object val)
eq(boolean condition, R column, Object val)
1
2
  • 等于 =
  • 例: eq("name", "老王")--->name = '老王'

# gt

gt(R column, Object val)
gt(boolean condition, R column, Object val)
1
2
  • 大于 >
  • 例: gt("age", 18)--->age > 18

# ge

ge(R column, Object val)
ge(boolean condition, R column, Object val)
1
2
  • 大于等于 >=
  • 例: ge("age", 18)--->age >= 18

# lt

lt(R column, Object val)
lt(boolean condition, R column, Object val)
1
2
  • 小于 <
  • 例: lt("age", 18)--->age < 18

# le

le(R column, Object val)
le(boolean condition, R column, Object val)
1
2
  • 小于等于 <=
  • 例: le("age", 18)--->age <= 18

# between

between(R column, Object val1, Object val2)
between(boolean condition, R column, Object val1, Object val2)
1
2
  • BETWEEN 值1 AND 值2
  • 例: between("age", 18, 30)--->age between 18 and 30

# like

like(R column, Object val)
like(boolean condition, R column, Object val)
1
2
  • LIKE '%值%'
  • 例: like("name", "王")--->name like '%王%'

# likeLeft

likeLeft(R column, Object val)
likeLeft(boolean condition, R column, Object val)
1
2
  • LIKE '%值'
  • 例: likeLeft("name", "王")--->name like '%王'

# likeRight

likeRight(R column, Object val)
likeRight(boolean condition, R column, Object val)
1
2
  • LIKE '值%'
  • 例: likeRight("name", "王")--->name like '王%'

# isNotNull

isNotNull(R column)
isNotNull(boolean condition, R column)
1
2
  • 字段 IS NOT NULL
  • 例: isNotNull(Document::getTitle)--->title is not null

# exists

exists(R column)
exists(boolean condition, R column)
1
2

效果和功能等价于上面的isNotNull,主要是为了照顾es原生语法习惯的用户

# in

in(R column, Collection<?> value)
in(boolean condition, R column, Collection<?> value)
1
2
  • 字段 in (value.get(0), value.get(1), ...)
  • 例: in("age",{1,2,3})--->age in (1,2,3)
in(R column, Object... values)
in(boolean condition, R column, Object... values)
1
2
  • 字段 in (v0, v1, ...)
  • 例: in("age", 1, 2, 3)--->age in (1,2,3)

# groupBy

groupBy(R... columns)
groupBy(boolean condition, R... columns)
1
2
  • 分组:GROUP BY 字段, ...
  • 例: groupBy(Document::getId,Document::getTitle)--->group by id,title

# orderByDesc

orderByDesc(R... columns)
orderByDesc(boolean condition, R... columns)
1
2
  • 排序:ORDER BY 字段, ... DESC
  • 例: orderByDesc(Document::getId,Document::getTitle)--->order by id DESC,title DESC

# limit

limit(Integer n);

limit(Integer m, Integer n);
1
2
3
  • limit n 最多返回多少条数据,相当于MySQL中limit n 中的n,用法一致.
  • limit m,n 跳过m条数据,最多返回n条数据,相当于MySQL中的limit m,n 或 offset m limit n
  • 例: limit(10)--->最多只返回10条数据
  • 例: limit(2,5)--->跳过前2条数据,从第3条开始查询,总共查询5条数据

温馨提示

n参数若不指定,则其默认值是10000 如果你单次查询超过1W条,建议采用分页(参考后面分页章节),万不得已非要在这里指定超过1w,比如指定2w,需要在查询的实体类上加上注解@IndexName(maxResultWindow=20000) 指定其maxResultWindow,并重建索引,否则es会报错,这是es的规则,它作此限制应该是为了保护你的内存防止溢出. 如果你单次查询,不想要太多得分较低的数据,需要手动指定n去做限制. 另外此参数作用与Es中的size,from一致,只是为了兼容MySQL语法而引入,使用者可以根据自身习惯二选一,当两种都用时,只有一种会生效,后指定的会覆盖先指定的.

# from

from(Integer from)
1
  • 从第几条数据开始查询,相当于MySQL中limit (m,n)中的m.
  • 例: from(10)--->从第10条数据开始查询

# size

size(Integer size)
1
  • 最多返回多少条数据,相当于MySQL中limit (m,n)中的n 或limit n 中的n
  • 例: size(10)--->最多只返回10条数据

温馨提示

如果你单次查询,不想要太多得分较低的数据,需要手动指定size去做限制.

# minScore

minScore(Float score)
1
  • 查询得分不低于score的数据,如果得分低于此值,则不被命中

# trackScores

trackScores();
1
  • 开启计算得分 默认值为关闭状态 查询得分可以用于排序等场景

# index

index(String indexName)
index(boolean condition, String indexName)
1
2

温馨提示

可通过wrapper.index(String indexName)指定本次查询作用于哪个索引,如果本次查询要从多个索引上查询,那么索引名称可以用逗号隔开,例如wrapper.index("index1","indexe2"...) wrapper中指定的索引名称优先级最高,如果不指定则取实体类中配置的索引名称,如果实体类也未配置,则取实体名称小写作为当前查询的索引名 针对insert/delete/update等接口中无wrapper的情况,如果你需要指定索引名,可直接在对应接口的入参中添加索引名称,可参考下面示例:

    Document document = new Document();
    // 省略为document赋值的代码
    String indexName = "laohan";
    insert(document,indexName);
1
2
3
4

# and

and(Consumer<Param> consumer)
and(boolean condition, Consumer<Param> consumer)
1
2
  • AND
  • 例: and(i -> i.eq(Document::getTitle, "Hello").eq(Document::getCreator, "Guy"))--->and (title ='Hello' and creator = 'Guy' )

# or

or()
or(boolean condition)
1
2
  • 拼接 OR 注意事项: 主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接)
  • 例: eq("Document::getId",1).or().eq(Document::getTitle,"Hello")--->id = 1 or title ='Hello'
or(Consumer<Param> consumer)
or(boolean condition, Consumer<Param> consumer)
1
2
  • 嵌套 OR

  • 例: or(i -> i.eq(Document::getTitle, "Hello").ne(Document::getCreator, "Guy"))--->or (title ='Hello' and status != 'Guy' )

  • 特殊情况

  • 例: eq(Document::getTitle,"Hello") .and(i->i.eq(Document::getCreator,"Bob").or().eq(Document::getCreator,"Tom"))---> title="Hello" and(creator="Bob" or creator="Tom")

# filter

and和filter的选择,它们在功能上类似,都是表示必须满足的条件,不同之处在于filter不计算得分,性能表现更好,但不支持根据得分排序.

filter()
filter(boolean condition)
1
2
  • 拼接 filter 注意事项: 主动调用filter表示紧接着下一个方法不是用and连接!(不调用filter则默认为使用and连接)
  • 例: eq("Document::getId",1).filter().eq(Document::getTitle,"Hello")--->id = 1 and title ='Hello'
filter(Consumer<Param> consumer)
filter(boolean condition, Consumer<Param> consumer)
1
2
  • 嵌套 filter
  • 例: filter(i -> i.eq(Document::getTitle, "Hello").eq(Document::getCreator, "Guy"))--->or (title ='Hello' and status = 'Guy' )

# not

not()
not(boolean condition)
1
2
  • 拼接 not 注意事项: 主动调用not表示紧接着下一个方法不是用and连接!(不调用not则默认为使用and连接)
  • 例: eq("Document::getId",1).not().eq(Document::getTitle,"Hello")--->id = 1 and title !='Hello'
filter(Consumer<Param> consumer)
filter(boolean condition, Consumer<Param> consumer)
1
2
  • 嵌套 not
  • 例: not(i -> i.eq(Document::getTitle, "Hello").eq(Document::getCreator, "Guy"))---> (title !='Hello' and status != 'Guy' )

# nested

nested(String path, Consumer<Param> consumer)
nested(String path, Consumer<Param> consumer, ScoreMode scoreMode)
nested(boolean condition, String path, Consumer<Param> consumer)
nested(boolean condition, String path, Consumer<Param> consumer, ScoreMode scoreMode)
1
2
3
4
  • 嵌套查询 nested
  • 例: wrapper.nested("users.faqs", i ->i.eq(question,"问题") ---> from faq where question = '问题' 使用场景仅限于嵌套类型的查询,关于嵌套类型和父子类型后面高阶语法中会有单独的章节来讲,此处仅简单列一下.
帮助我们改善此文档 (opens new window)
上次更新: 2025/05/11
索引条件构造器
更新条件构造器

← 索引条件构造器 更新条件构造器→

Theme by Vdoing | Copyright © 2021-2025 老汉 | 浙ICP备2022020479号 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式