бодибилдер должен
ТЕМА: инструмент: 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"
}
}
]
}
}
}