V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiangyin
V2EX  ›  Java

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

  •  
  •   xiangyin · 318 天前 · 992 次点击
    这是一个创建于 318 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 可以来判断参数不为空的实现方法?

    akinoowari
        1
    akinoowari  
       318 天前
    你这个查询如果只有一个 match 直接 must 就完事儿了,不用非得套一层 bool ;另外如果你非要写成 stream 的,就把 match 写一个单独的方法,在里面判空,为空就 match_all 或者别的。
    akinoowari
        2
    akinoowari  
       318 天前
    @akinoowari 说错了,直接一个 match 就可以(不是 must )。等效于套了 bool+must
    xiangyin
        3
    xiangyin  
    OP
       318 天前
    @akinoowari okok 谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1742 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:15 · PVG 00:15 · LAX 08:15 · JFK 11:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.