Как сгенерировать тот же самый запрос на поиск упроса, используя клиент Java Resthighlevel? - PullRequest
1 голос
/ 07 мая 2019

Я пытаюсь сгенерировать запрос, используя Java RestHighLevelClient из Elasticsearch, подобный следующему:

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));

    ........

Iпропустили какую-то его часть, чтобы она была маленькой.Но я использую 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 голосов
/ 07 мая 2019
"adjust_pure_negative" : true 

Это ваша проблема, установите значение false или удалите его.

Прочитайте здесь почему это происходит.

...