# Попытка связать документы в разных индексах по полю

**URL:** <https://discuss.elastic.co/t/topic/44542>\
**Category:** Вопросы на русском языке\
**Created:** [March 16, 2016, 10:28am UTC](https://discuss.elastic.co/t/topic/44542 "2016-03-16T10:28:48Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![SKuzubov](https://avatars.discourse-cdn.com/v4/letter/s/dec6dc/32.png) [@SKuzubov](https://discuss.elastic.co/u/SKuzubov)\
**Post date:** [March 16, 2016, 10:28am UTC](https://discuss.elastic.co/t/topic/44542/1 "2016-03-16T10:28:48Z")

</div>

Здравствуйте, коллеги.  
Представьте ситуацию когда есть три лог-файла (три индекса) которые импортируются в ES с использованием LS. Каждый лог-файл пишет независимое приложение. Лог-файлы представляют запись всех входящих и исходящих запросов в/из данного приложения. При каждом запросе создается уникальный идентификатор, однозначно указывающий на транзакцию. Но этот идентификатор валиден только для приложений, взаимодействующих между собой: т.е. в логах 1 и 2, и в логах 2 и 3. ИДентификатор из приложения/лога 1 никогда не появится в приложении/логе 3. А вся транзакция проходит через все три приложения (но как вы уже поняли сквозного идентификатора нет).

Есть задача: показать все записи из всех логов по одной транзакции. Если перевести это на язык SQL-запроса то все сводиться к возможности использования конструкции INNER JOIN.  
Я понимаю, что прямого аналога в ES нет и видел множество вопросов подобного рода на форуме... мой вопрос скорее риторический. Хочется понимать "смотрят" ли разработчики на такой функционал в следующих версиях и как люди решают подобные задачи сейчас? (понятно, что такую логику можно реализовать на клиентском приложении)

P.S. Вопрос возник после того как был проведен пилот с использованием ПО SPLUNK. Там такое мапирование есть ☹

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 18, 2016, 10:17pm UTC](https://discuss.elastic.co/t/topic/44542/2 "2016-03-18T22:17:11Z")

</div>

Судя по вашему описанию, все 3 лога можно связать как дочерние документы, если для лога 1 использовать идентификатор из приложения, как идентификатор записи; во втором логе в качестве идентификатора записи использовать идентификатор второго приложения, а в качестве родителя - идентификатор первого приложения; в 3 логе идентификатор второго приложения можно использовать и как идентификатор родителя так и идентификатор записи.

---

<div class="post-metadata">

**Author:** ![SKuzubov](https://avatars.discourse-cdn.com/v4/letter/s/dec6dc/32.png) [@SKuzubov](https://discuss.elastic.co/u/SKuzubov)\
**Post date:** [March 19, 2016, 3:30pm UTC](https://discuss.elastic.co/t/topic/44542/3 "2016-03-19T15:30:09Z")

</div>

Приветствую, Игорь

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

* * *

лог приложения 1  
`10.03.2016 16:00:00 user=ivanov transaction1=101 info1=разная информация`

лог приложения 2  
`10.03.2016 16:00:10 transaction2=101 id2=abc-200-xyz info2=другая информация`

лог приложения 3  
`10.03.2016 16:00:20 id3=abc-200-xyz info3=совсем другая информация`

* * *

Есть потребность осуществлять поиск по полю `user` Т.е. при поиске `ivanov` выводился текст `другая информация` и `совсем другая информация` из логов приложения 2 и 3 (поля `info2` и `info3` соответственно). Линковка этих строк может быть произведена по следующим полям: `transaction1=transaction2` и `id2=id3`.

Можете уточнить, используя данный пример, какую технологию можно применить для облегчения поиска?

P.S. Все логи содержат большое кол-во различных строк. Не все строки лог-файла приложения 1 имеют "продолжение" в лог-файле приложения 2. А так же сам лог приложения 2 имеет записи которые никак не связаны с другими записями логов - т.е. сам по себе самодостаточен и не является лишь продолжением операций в приложении 1.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 21, 2016, 4:14pm UTC](https://discuss.elastic.co/t/topic/44542/4 "2016-03-21T16:14:04Z")

</div>

Да, в этом случае, хорошего решения пока нет. Для распределенной системы, как elasticsearch, JOIN - проблема очень сложная.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:49pm UTC](https://discuss.elastic.co/t/topic/44542/5 "2017-07-06T13:49:00Z")

</div>


