# Вопросы по организации индексов

**URL:** <https://discuss.elastic.co/t/topic/69714>\
**Category:** Вопросы на русском языке\
**Created:** [December 21, 2016, 9:36pm UTC](https://discuss.elastic.co/t/topic/69714 "2016-12-21T21:36:49Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![bio](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/bio/32/76409_2.png) [@bio](https://discuss.elastic.co/u/bio)\
**Post date:** [December 21, 2016, 9:36pm UTC](https://discuss.elastic.co/t/topic/69714/1 "2016-12-21T21:36:49Z")

</div>

Всем привет!

**Вопрос №1** - Можно ли как-то связывать вложенные объекты с документами в другом индексе или типе ?  
Например:  
Объекты Clients

```auto
[
    {
        "id": 1,
        "name": "client 1",
        "tags": [
            {
                "id": 1,
                "name": "tag 1"
            },
            {
                "id": 2,
                "name": "tag 2"
            }
        ],
        "deals": [
            {
                "id": 1,
                "name": "deal 1",
                "tags": [
                    {
                        "id": 1,
                        "name": "tag 1"
                    }
                ]
            }
        ]
    }
]

```

Объекты Deals

```auto
[
    {
        "id": 1,
        "name": "deal 1",
        "tags": [
            {
                "id": 1,
                "name": "tag 1"
            }
        ]
    },
    {
        "id": 2,
        "name": "deal 2",
        "tags": [
            {
                "id": 2,
                "name": "tag 2"
            }
        ]
    }
]

```

Объекты Tags

```auto
[
    {
        "id": 1,
        "name": "tag 1"
    },
    {
        "id": 2,
        "name": "tag 2"
    }
]

```

**Вопрос №2** - Можно ли обновлять вложенные объекты если измениться оригинал ? Например, в объекте tag с id = 1 изменилось поле name на "tag 3". Можно ли силами эластика найти и поменять данный объект в других объектах ?

**Вопрос №3** - Если я верно понял, то не может быть у полей в одном индексе с одинаковыми названиями разные типы данных. Но что делать если во вложенных объектах встретилось поле с другим типом данных ?  
Например:

```auto
{
    "deal_id": "1",
    "client": {
        "id": "2",
        "type": "0"
    },
    "type": {
        "id": 3,
        "name": "Тип 1"
    }
}

```

client.type и type - абсолютно разные поля и друг с другом они не связаны, просто их так назвали.

**Вопрос №4** - Сейчас сделано так что для каждого пользователя создаётся свой индекс, а в нём все уже все доступные типы(clients, deals, tags). У каждого могу быть абсолютно разные поля и разными типами данных, как в вопросе №3. Насколько верно так делать ?

**Вопрос №5** - Влияет ли кол-во и размер индексов на поиск, индексацию, переиндексацию ?

Заранее благодарю за ответы.  
PS. Извиняюсь что задал столько вопросов в одном посте, но они связаны между собой.

---

<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:** [December 22, 2016, 7:57pm UTC](https://discuss.elastic.co/t/topic/69714/2 "2016-12-22T19:57:10Z")

</div>

> [@bio](#):
>
> Вопрос №1 - Можно ли как-то связывать вложенные объекты с документами в другом индексе или типе ?

Elasticsearch связывание объектов из разных индексов не поддерживает. Это ведь поисковый движок, а не реляционная база данных.

> Вопрос №2 - Можно ли обновлять вложенные объекты если измениться оригинал ? Например, в объекте tag с id = 1 изменилось поле name на "tag 3". Можно ли силами эластика найти и поменять данный объект в других объектах ?

Обновление всегда осуществляется на уровне записи, любое изменение записи требует ее полной переиндексации.

> Вопрос №3 - Если я верно понял, то не может быть у полей в одном индексе с одинаковыми названиями разные типы данных. Но что делать если во вложенных объектах встретилось поле с другим типом данных ?

В вашем примере эти поля имеют разные названия. Одно поле - `client.id` и другое - `type.id`.

> Вопрос №4 - Сейчас сделано так что для каждого пользователя создаётся свой индекс, а в нём все уже все доступные типы(clients, deals, tags). У каждого могу быть абсолютно разные поля и разными типами данных, как в вопросе №3. Насколько верно так делать ?

Эти типы связаны через отношение parent/child? Если да - то выбора нет - они должны быть в одном индексе. Если нет - то надо смотреть на схему, объемы данных и т. д. В идеале, лучше иметь один тип в каждом индексе, но бывают исключения.

> Вопрос №5 - Влияет ли кол-во и размер индексов на поиск, индексацию, переиндексацию ?

Да

---

<div class="post-metadata">

**Author:** ![bio](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/bio/32/76409_2.png) [@bio](https://discuss.elastic.co/u/bio)\
**Post date:** [December 23, 2016, 5:39am UTC](https://discuss.elastic.co/t/topic/69714/3 "2016-12-23T05:39:40Z")

</div>

Спасибо за ответы!

> [@Igor\_Motov](#):
>
> Обновление всегда осуществляется на уровне записи, любое изменение записи требует ее полной переиндексации.

Получается что во время изменения документа в типе tag, мне придётся пробегаться по всем документам(где этот tag использовался) в данном индексе, искать совпадения и обновлять их ?

> [@Igor\_Motov](#):
>
> В вашем примере эти поля имеют разные названия. Одно поле - client.id и другое - type.id.

В примере имелось ввиду поле "type", в client оно long, а в общем объекте оно object. Эластик на это ругается.

> [@Igor\_Motov](#):
>
> Да

А в какую сторону ? При большем количестве индексов страдает производительность ?

---

<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:** [December 23, 2016, 7:30pm UTC](https://discuss.elastic.co/t/topic/69714/4 "2016-12-23T19:30:48Z")

</div>

> [@bio](#):
>
> В примере имелось ввиду поле "type", в client оно long, а в общем объекте оно object. Эластик на это ругается.

Что такое `client` и `type`? У вас в одном примере это были вложенные поля, в другом - типы. Вы не могли бы привести пример curl команд, которые демонстрировали бы проблему.

> [@bio](#):
>
> А в какую сторону ? При большем количестве индексов страдает производительность ?

Это очень сложный вопрос, и ответ, во многом, зависит от того, о какой производительности вы говорите. Тут слишком много параметров. Больше индексов при том же количестве записей в кластере? Больше индексов и больше записей? Больше индексов, и больше записей, но записи меньше? Поиск по одному индексу или по всем одновременно? Как измеряется производительность - как пропускная способность и латентность поиска или пропускная способность индексации?...

---

<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:** [January 20, 2017, 7:30pm UTC](https://discuss.elastic.co/t/topic/69714/5 "2017-01-20T19:30:51Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
