бодибилдер должен

ТЕМА: инструмент: https://github.com/danpaz/bodybuilder Конструктор тела запросов elasticsearch. Легко создавайте сложные запросы для elasticsearch с помощью простого и предсказуемого API.

Кто-нибудь знает, как сделать такой запрос с помощью bodybuilder js?

"query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "match_phrase": {
                  "entityType": "CATEGORY"
                }
              },
              {
                "match_phrase": {
                  "entityType": "TAG"
                }
              },
              {
                "match_phrase": {
                  "entityType": "SHOP"
                }
              }
            ],
            "minimum_should_match": 1
          }
        }
      ]
    }
  }

Я жестко об этом

 bodybuilder()
        .orQuery('match_phrase', 'entityType', 'CATEGORY')
        .orQuery('match_phrase', 'entityType', 'TAG')
        .orQuery('match_phrase', 'entityType', 'SHOP')
        .build();

но потом вылезаю примерно так

{
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "entityType": "CATEGORY"
          }
        },
        {
          "match_phrase": {
            "entityType": "TAG"
          }
        },
        {
          "match_phrase": {
            "entityType": "SHOP"
          }
        }
      ]
    }
  }
}

что не то же самое

1 ответ

Вы можете создать обязательный запрос, указав функцию обратного вызова в качестве второго параметра запроса ИЛИ notQuery ИЛИ orQuery.

Вышеуказанный запрос должен содержать только один элемент (bool -> should), поэтому он не добавляет никакого значения. если должен содержать еще один элемент, то вы можете построить следующим образом.

Давайте добавим еще одну проверку атрибута в обязательный запрос, приведенный выше, давайте укажем страну, которая должна быть из Индии, тогда вы можете создать запрос следующим образом:

      const shouldQuery = (build) => {
    return build.orQuery('match_phrase', 'entityType', 'CATEGORY')
        .orQuery('match_phrase', 'entityType', 'TAG')
        .orQuery('match_phrase', 'entityType', 'SHOP')
}

bodybuilder()
    .query('bool', shouldQuery)
    .query('term', 'country.keyword', 'India')
    .build();

Результатом будет,

      {
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "match_phrase": {
                  "entityType": "CATEGORY"
                }
              },
              {
                "match_phrase": {
                  "entityType": "TAG"
                }
              },
              {
                "match_phrase": {
                  "entityType": "SHOP"
                }
              }
            ]
          }
        },
        {
          "term": {
            "country.keyword": "India"
          }
        }
      ]
    }
  }
}
Другие вопросы по тегам