Индексировать главный объект, подобъекты и выполнять поиск по подобъектам (которые возвращают дочерние объекты)

У меня есть подобный объект (здесь упрощено). У каждого штамма много хромосом, много локусов, много функций, много продуктов... Здесь я просто поставил по 1 из каждого.

Структура в json:

{
  "name": "my strain",
  "public": false,
  "authorized_users": [1, 23, 51],
  "chromosomes": [
    {
      "name": "C1",
      "locus": [
        {
          "name": "locus1",
          "features": [
            {
              "name": "feature1",
              "products": [
                {
                  "name": "product1"
                  //...
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

Я хочу добавить этот объект в Elasticsearch, на данный момент я добавляю объекты отдельно: локус, функции и продукты. Можно выполнять поиск (я хочу ввести ключевое слово, просмотреть название локуса, название функций и название продуктов), но мне нужно дублировать данные, такие как public и author_users, в каждом подобъекте.

Могу ли я зарегистрировать весь объект в elasticsearch и просто выполнить поиск на каждом уровне локуса, функциях и продуктах? И получать по отдельности? (не возвращать объект деформации)


person mpiot    schedule 14.04.2017    source источник


Ответы (1)


Да, вы можете выполнять поиск на любом уровне (т. е. с запросом вида «chromosomes.locus.name»).

Но поскольку у вас есть массивы на каждом уровне, вам придется использовать вложенные объекты (и вложенный запрос), чтобы получить именно то, что вы хотите, что немного сложнее:

Что касается вашего последнего вопроса, нет, вы не можете получать подобъекты по отдельности, эластичный возвращает весь исходный объект json. Если вам нужны только данные из подобъектов, вам придется использовать вложенные агрегации.

person Damien Ferey    schedule 14.04.2017
comment
Спасибо, я посмотрю. На данный момент я не могу этого сделать... Может быть, родитель/ребенок работает лучше? - person mpiot; 18.04.2017