EsearchXElasticsearch ORM 框架

联合创作 · 2023-09-30 01:31

EsearchX for java


基于 okhttp + snack3 开发,是一个代码直白和简单的 Elasticsearch ORM 框架


项目里有3个关键的对象概念:



  • 执行上下文

  • 查询器

  • 命令


支持自动序列化和反序列化,以及批量插入、批量更新;脚本查询、聚合查询。


快速入门:





public class DemoApp {
String tableCreateDsl = "...";

public void demo() {
EsContext esx = new EsContext("localhost:30480");

//创建索引
esx.indiceCreate("user_log_20200101", tableCreateDsl);
esx.indiceCreate("user_log_20200102", tableCreateDsl);
esx.indiceCreate("user_log_20200103", tableCreateDsl);

//构建索引别名
esx.indiceAliases(a -> a
.add("user_log_20200101", "user_log")
.add("user_log_20200102", "user_log")
.add("user_log_20200103", "user_log"));

//删除索引(如果存在就删了;当然也可以直接删)
if (esx.indiceExist("user_log_20200101")) {
esx.indiceDrop("user_log_20200101");
}

//批量插入
List<LogDo> list = new ArrayList<>();
list.add(new LogDo());
esx.indice("user_log").insertList(list);

//批量插入或更新
Map<String, LogDo> list = new LinkedHashMap<>();
list.put("...",new LogDo());
esx.indice("user_log").upsertList(list);

//一个简单的查询
LogDo result = esx.indice("user_log").selectById("1");

//一个带条件的查询
EsData<LogDo> result = esx.indice("user_log")
.where(r -> r.term("level", 5))
.orderByDesc("log_id")
.limit(50)
.selectList(LogDo.class);

//一个复杂些的查询
EsData<LogDo> result = esx.indice(indice)
.where(c -> c.useScore().must()
.term("tag", "list1")
.range("level", r -> r.gt(3)))
.orderByAsc("level")
.andByAsc("log_id")
.minScore(1)
.limit(50, 50)
.selectList(LogDo.class);

//脚本查询
EsData<LogDo> result = esx.indice(indice)
.where(c -> c.script("doc['tag'].value.length() >= params.len", p->p.set("len",2)))
.limit(10)
.selectList(LogDo.class);

//聚合查询
ONode result = esx.indice(indice)
.where(w->w.term("tag","list1"))
.limit(0)
.aggs(a -> a.terms("level", t -> t.size(20))
.aggs(a1 -> a1.topHits(2, s -> s.addByAes("log_fulltime"))))
.selectAggs();
}
}


浏览 12
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报