terry0314
V2EX  ›  问与答

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

  •  
  •   terry0314 · Apr 23, 2020 · 1407 views
    This topic created in 2236 days ago, the information mentioned may be changed or developed.

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

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

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

    Supplement 1  ·  Apr 24, 2020

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

    boolQueryBuilder.must(QueryBuilders.termQuery("id", "100"));
    boolQueryBuilder.must(QueryBuilders.matchQuery("city", "beijing"));
    
    4 replies    2020-04-23 19:39:10 +08:00
    itskingname
        1
    itskingname  
       Apr 23, 2020
    唉,用 Python 多省事。非得有 Java
    terry0314
        2
    terry0314  
    OP
       Apr 23, 2020
    @itskingname 我自己写东西肯定用 Py,但项目用 Java 写的没法呀🤣
    damngood
        3
    damngood  
       Apr 23, 2020 via iPhone
    用第三方 client lib 来实现
    开启 trace 会打印 query dsl
    自己手写太太太麻烦了
    damngood
        4
    damngood  
       Apr 23, 2020 via iPhone
    噢 sorry 没看到下面的更具体的问题
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5242 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 05:45 · PVG 13:45 · LAX 22:45 · JFK 01:45
    ♥ Do have faith in what you're doing.