Loading...
墨滴

可爱猪猪

2021/06/06  阅读:50  主题:橙心

Elasticsearch一小坑,一大跤

周三序
下班前夕 用户提出紧急bug
xx功能查询的结果比预期少了10多条
排查bug ING....
程序中各种关键点增加log日志打印查询结果条数
不负辛苦
终于发现吃掉数据的关键点....

这个坑

项目中使用的一个很简单的查询,比如像下面这个,查询name=小猪佩奇的所有记录:

QueryBuilder qb = QueryBuilders.termQuery("name""小猪佩奇");
SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(qb)
                .build();
elasticsearchTemplate.queryForList(searchQuery, Paige.class);

可是,在对应的索引中,name=小猪佩奇的记录有20条,但是结果却仅仅返回了10条。

所以,毫无疑问,这个名字叫queryForList并不像命名的那样,会查询命中条件的list,更像是被分页

揭秘

那我们还是去看看这个queryForList是不是像我们猜测的一样会分页吧。 查看api的源码是这样的:

public <T> List<T> queryForList(CriteriaQuery query,Class<T> clazz){
  return this.queryForPage(query, clazz).getContent();
}

果然,这个方法最终调用的是queryForPage,那另外一个疑问又来了?哪里设置的默认10条呢?
查阅资料发现,服务端如果分页请求没有设置请求的size,默认为10条。

总结

我觉得,这个api的命名其实有点误导大家,很容易让人觉得这个是会返回符合查询条件的所有结果,你觉得呢?

可爱猪猪

2021/06/06  阅读:50  主题:橙心

作者介绍

可爱猪猪