【问题标题】:How to generate the same elasticsearch query using Java Resthighlevel client?如何使用 Java Resthighlevel 客户端生成相同的弹性搜索查询?
【发布时间】:2019-05-07 14:40:56
【问题描述】:

我正在尝试使用 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 客户端构建相同的查询?

【问题讨论】:

  • 它添加的东西是默认设置,你不必担心。
  • 但是输出完全不同..我错过了什么吗?
  • 不同但100%等效
  • 为什么"query" : ttttt,ttttt 周围缺少引号?
  • @Val 你说得对,问题出在我的代码上

标签: java elasticsearch elasticsearch-rest-client


【解决方案1】:
"adjust_pure_negative" : true 

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

阅读here为什么会发生这种情况。

【讨论】:

  • 我试过了 还是一样 没有效果
猜你喜欢
  • 2020-08-31
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 2016-08-01
相关资源
最近更新 更多