求助: ES Java Client API 中查询参数可能为空值怎么解决?

291 天前
 xiangyin
String key = null;
esClient.search(search -> search
                .index("index")
                .query(query -> query.
                        bool(bool -> bool
                                .must(must -> must.match(match -> match.field("field").query(key))
                                )
                        )
                ), XXX.class);

就是 key 可能传入为 null

查询的时候传入空值就会报错,没有找到好的解决办法,只能先一个个进行 if 判断不为空后在调 api 查询,感觉很不优雅。希望可以优雅一点的方式判断空值,或者传空值的时候能想办法全匹配。 想用 lambda 形式来写查询,有没有类似 mybatisplus 中 lambdaquerywrapper.eq 的第一个参数为 bool 可以来判断参数不为空的实现方法?

963 次点击
所在节点    Java
3 条回复
akinoowari
291 天前
你这个查询如果只有一个 match 直接 must 就完事儿了,不用非得套一层 bool ;另外如果你非要写成 stream 的,就把 match 写一个单独的方法,在里面判空,为空就 match_all 或者别的。
akinoowari
291 天前
@akinoowari 说错了,直接一个 match 就可以(不是 must )。等效于套了 bool+must
xiangyin
291 天前
@akinoowari okok 谢谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1015018

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX