V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
xiangyin
V2EX  ›  Java

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

  •  
  •   xiangyin · Feb 8, 2024 · 2796 views
    This topic created in 809 days ago, the information mentioned may be changed or developed.
    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  
       Feb 8, 2024
    你这个查询如果只有一个 match 直接 must 就完事儿了,不用非得套一层 bool ;另外如果你非要写成 stream 的,就把 match 写一个单独的方法,在里面判空,为空就 match_all 或者别的。
    akinoowari
        2
    akinoowari  
       Feb 8, 2024
    @akinoowari 说错了,直接一个 match 就可以(不是 must )。等效于套了 bool+must
    xiangyin
        3
    xiangyin  
    OP
       Feb 8, 2024
    @akinoowari okok 谢谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5788 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:09 · PVG 15:09 · LAX 00:09 · JFK 03:09
    ♥ Do have faith in what you're doing.