如何使用Java Resthighlevel客户端生成相同的Elasticsearch查询?

时间:2019-05-07 05:58:29

标签: java elasticsearch elasticsearch-rest-client

我正在尝试使用Elasticsearch的Java RestHighLevelClient生成类似于以下内容的查询:

GET /field_search/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "ENTRY_ID": "ttttt"
          }
        },
        {
          "match": {
            "MODULE_ID": "xxxxx"
          }
        },
        {
          "match": {
            "COMPANY_ID": "22244"
          }
        },
        {
          "match": {
            "DELETED": false
          }
        }
      ]
    }
  }
}

这是我用来生成它的代码

    BoolQueryBuilder boolQueryBuilder1 = new BoolQueryBuilder();

    boolQueryBuilder1.must().add(QueryBuilders.matchQuery("MODULE_ID", moduleId));

    boolQueryBuilder1.must().add(QueryBuilders.matchQuery("COMPANY_ID", companyId));

    ........

为了使尺寸较小,我已经跳过了其中的一部分。但是我使用了一个BoolQueryBuilder,它生成的查询是这样的:

{
  "query": {
  "bool" : {
    "must" : [
      {
        "match" : {
          "MODULE_ID" : {
            "query" : "xxxxx",
            "operator" : "OR",
            "prefix_length" : 0,
            "max_expansions" : 50,
            "fuzzy_transpositions" : false,
            "lenient" : false,
            "zero_terms_query" : "NONE",
            "auto_generate_synonyms_phrase_query" : false,
            "boost" : 1.0
          }
        }
      },
      {
        "match" : {
          "COMPANY_ID" : {
            "query" : "22244",
            "operator" : "OR",
            "prefix_length" : 0,
            "max_expansions" : 50,
            "fuzzy_transpositions" : false,
            "lenient" : false,
            "zero_terms_query" : "NONE",
            "auto_generate_synonyms_phrase_query" : false,
            "boost" : 1.0
          }
        }
      },
      {
        "match" : {
          "DELETED" : {
            "query" : false,
            "operator" : "OR",
            "prefix_length" : 0,
            "max_expansions" : 50,
            "fuzzy_transpositions" : false,
            "lenient" : false,
            "zero_terms_query" : "NONE",
            "auto_generate_synonyms_phrase_query" : false,
            "boost" : 1.0
          }
        }
      },
      {
        "match" : {
          "ENTRY_ID" : {
            "query" : ttttt,
            "operator" : "OR",
            "prefix_length" : 0,
            "max_expansions" : 50,
            "fuzzy_transpositions" : false,
            "lenient" : false,
            "zero_terms_query" : "NONE",
            "auto_generate_synonyms_phrase_query" : false,
            "boost" : 1.0
          }
        }
      }
    ],
    "adjust_pure_negative" : true,
    "boost" : 1.0
  }
}
}

它将其他内容添加到查询中。使用上述普通查询,我的结果可以正确返回,但是使用Java生成的查询,我的结果却没有,所以我如何使用Java客户端构建相同的查询?

1 个答案:

答案 0 :(得分:0)

"adjust_pure_negative" : true 

这是您的问题,请将其设置为false或将其删除。

阅读here发生这种情况的原因。