Сравните два поля документаasticsearch из разных индексов, разбитых по дате - PullRequest
0 голосов
/ 21 марта 2019

У меня есть данные, разделенные по дням, со следующей упрощенной структурой (рассматривайте объекты в массиве как отдельные документы). Фактическое количество документов составит более 10 миллионов:

/ продукция-2019.01.01

[
  {
    "id": 1,
    "name": "Product1",
    "price": 15
  },
  {
    "id": 2,
    "name": "Product2",
    "price": 10
  },
  {
    "id": 3,
    "name": "Product3",
    "price": 10
  }
]

/ продукты-2019.01.02

[
  {
    "id": 1,
    "name": "Product1",
    "price": 10
  },
  {
    "id": 2,
    "name": "Product2",
    "price": 12
  },
  {
    "id": 3,
    "name": "Product3",
    "price": 10
  }
]

/ продукты-2019.01.03

[
  {
    "id": 1,
    "name": "Product1",
    "price": 10
  },
  {
    "id": 2,
    "name": "Product2",
    "price": 10
  },
  {
    "id": 3,
    "name": "Product3",
    "price": 13
  }
]

Мой вариант использования заключается в том, что мне нужно сравнить цены между двумя точными днями, в данном случае это может быть:

  • 2019.01.01 против 2019.01.02
  • 2019.01.01 против 2019.01.03
  • 2019.01.02 против 2019.01.03

Очевидно, что чем больше ежедневных данных, тем больше возможных комбинаций.

Если бы мне пришлось сравнивать 2019.01.01 с 2019.01.03, запрос должен был бы вернуть 2, потому что цена продукта 1 и продукта 3 отличается между этими индексами.

Я ищу помощь для создания такого запроса и открыт для любых предложений по модели данных.

1 Ответ

0 голосов
/ 22 марта 2019

Я думаю, что вы можете просто агрегировать по id и цене в этом случае и добавить min_doc_count, чтобы отфильтровать, где это не совпадает по двум индексам

GET logs1,logs2/_search
{
  "size": 0,
  "aggs": {
    "by_product": {
      "terms": {
        "script": {
          "inline": "doc.id+'_'+doc.price"
        },
        "min_doc_count": 2
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...