V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
terry0314
V2EX  ›  问与答

ES 查询条件构造的一个问题

  •  
  •   terry0314 · 2020-04-23 18:50:33 +08:00 · 1007 次点击
    这是一个创建于 1700 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近刚开始看 ES 相关的文档,有一个问题,这样的一段查询应该怎么用 Java API 实现呢?

    {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "id": "100"
              }
            },
            {
              "match": {
                "city": "bejing"
              }
            },
            {
              "term": {
                "date": "2020-04-22"
              }
            }
          ]
        }
      }
    }
    

    看了官方文档,可以用 QueryBuilders.matchQuery() 或者 QueryBuilders.termQuery() 来实现单个字段的匹配,但像上面这样在一个查询中,同时用 match 和 term 匹配不同字段,用 QueryBuilder 应该怎么实现呢?

    第 1 条附言  ·  2020-04-24 00:01:51 +08:00

    最后 Google 出来了答案,用 BoolQueryBuilder.must()

    boolQueryBuilder.must(QueryBuilders.termQuery("id", "100"));
    boolQueryBuilder.must(QueryBuilders.matchQuery("city", "beijing"));
    
    4 条回复    2020-04-23 19:39:10 +08:00
    itskingname
        1
    itskingname  
       2020-04-23 18:53:30 +08:00
    唉,用 Python 多省事。非得有 Java
    terry0314
        2
    terry0314  
    OP
       2020-04-23 19:07:51 +08:00
    @itskingname 我自己写东西肯定用 Py,但项目用 Java 写的没法呀🤣
    damngood
        3
    damngood  
       2020-04-23 19:37:34 +08:00 via iPhone
    用第三方 client lib 来实现
    开启 trace 会打印 query dsl
    自己手写太太太麻烦了
    damngood
        4
    damngood  
       2020-04-23 19:39:10 +08:00 via iPhone
    噢 sorry 没看到下面的更具体的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3383 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:09 · PVG 19:09 · LAX 03:09 · JFK 06:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.