Похожие чаты

Всем привет! Ситуация: Есть документы с вложенным массивом объектов. Например: {

"id": 1,
"items": [
{"city": 1, "size": 1},
{"city": 2, "size": 2}
]
},
{
"id": 2,
"items": [
{"city": 2, "size": 3},
{"city": 3, "size": 2}
]
}

В ответ на запрос нужно получить только те документы, в объекте вложенного поля которых реализуется условие city = 2 AND size = 2.

Текущий запрос выглядит так:

{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "items",
"query": {
"bool": {
"must": [
{"term": {"items.city": 2}},
{"term": {"items.size": 2}}
]
}
}
}
]
}
}
}

Проблема заключается в том что на выходе получаю обе записи несмотря на то, что соответствие условию лишь в первом документе.

Подскажите какой раздел документации читать. Возможно что-то пропустил в разделах аггрегатных функций и фильтров.

Как заставить фильтр проверять условия в рамках одного конкретного объекта внутри вложенного поля?


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

Суть в том, что текущий документ - это карточка товара внутри которой вложенные объекты - её варианты. На стороне SQL можно легко идти от таблицы вариантов получая при помощи функции GROUP BY уникальные значения карточек для реализации пагинации. Но я не нашёл как можно такое реализовать в эластике. И можно ли?..

В подборке товаров может быть сколько угодно карточек. Уже весь мозг сломал :(

Если вдруг поможет, SQL версия того что нужно выглядит так:

SELECT cards.id
FROM cards
WHERE EXISTS(
SELECT 1
FROM items
WHERE
items.card_id = cards.id
AND items.city = 2
AND items.size = 2
)

В данный момент остановился на параметре "collapse". Пытаюсь понять нужен он здесь или нет.

5 ответов

56 просмотров

Покажите маппинг. Отсюда запрос выглядит ровно как он должен и поведение выглядит как если бы нестеда там не было.

Andrey-Helldar Автор вопроса
Etki
Покажите маппинг. Отсюда запрос выглядит ровно как...

Маппинг простой: PUT http://127.0.0.1:9200/cards { "mappings": { "properties": { "id": { "type": "long" }, "items": { "type": "nested", "properties": { "city": { "type": "long" }, "size": { "type": "long" } } } } } } Проблема в том, что при фильтрации значение "city = 2" проверяется в одном вложенном элементе, а "size = 2" - в другом. Нужно чтобы они проверялись в одном элементе. Для показа разницы могу написать SQL запросы: Сейчас: SELECT cards.id FROM cards WHERE EXISTS( SELECT 1 FROM items WHERE items.card_id = cards.id AND ( items.city = 2 OR items.size = 2 ) ) Надо так: SELECT cards.id FROM cards WHERE EXISTS( SELECT 1 FROM items WHERE items.card_id = cards.id AND items.city = 2 AND items.size = 2 )

Andrey-Helldar Автор вопроса
Andrey Helldar
Маппинг простой: PUT http://127.0.0.1:9200/cards ...

Курю доку по вложенным полям и думаю помогут ли опции "include_in_parent" и/или "include_in_root" в решении вопроса?.. Допустим, заюзать опцию "include_in_root" мы получим "плоскую" версию, но вопрос как потом собирать данные обратно. "collapse" берёт первый элемент, но не знаю берёт ли до фильтрации или после... https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html#nested-params

Andrey Helldar
Курю доку по вложенным полям и думаю помогут ли оп...

Я скормил напрямую пример: "hits": { "total": { "value": 1, "relation": "eq" }, Ничего сверх просто нестеда не должно быть нужно. Вы уверены, что вам возвращается что-то неправильное?

Andrey-Helldar Автор вопроса
Etki
Я скормил напрямую пример: "hits": { ...

Да. Возвращается две записи, а должна одна

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
any reference of this implementation?
BitBuddha
29
Ⓐrtto, [4/23/24 7:02 PM] Please explain more fully how it is not working exactly, and what are the steps you are taking, and what error messages come or what happens. Ⓐrtto, ...
Ezza Kezza
2
sounds like people have lost their kaspa on tradeogre... does this mean tradeogre not trustworthy?
Ezza Kezza
15
Страшнейшая правда про списки ЦБ. С первых дней жизни P2P сферы, молодые человеки, начитавшись законодательной базы и "внутренних" документов, решили, что им противостоит сер...
Foxcool
3
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
So much speculation in the last week. So much volatility in price. This is because Hedera has a GC that isn't using the network it's governing. Why aren't people asking why a...
Summit Seeker R
9
Anyone else having this error when trying to make transactions?
Datzel
11
Question: How viable is it to use Anvil as the backend infrastructure for managing a TradFi portfolio, while integrating Flexa for instant liquidity and payment solutions? Cou...
Kevin
2
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта