# Объединение таблиц

Объединение двух существующих **простых** таблиц может быть более эффективным, чем индексирование данных с нуля, и может быть желательным в некоторых случаях (например, при объединении таблиц «main» и «delta» вместо простого перестроения «main» в схеме разбиения «main+delta»). Поэтому `indexer` предоставляет опцию для этого. Объединение таблиц обычно происходит быстрее, чем перестроение, но всё же **не** мгновенно для больших таблиц. По сути, нужно один раз прочитать содержимое обеих таблиц и один раз записать результат. Объединение таблиц размером 100 ГБ и 1 ГБ, например, приведёт к 202 ГБ ввода/вывода (но это всё ещё, вероятно, меньше, чем требуется для индексирования с нуля).

Основной синтаксис команды выглядит следующим образом:

```bash
sudo -u manticore indexer --merge DSTINDEX SRCINDEX [--rotate] [--drop-src]
```

Если не указан параметр `--drop-src`, затрагивается только таблица DSTINDEX: содержимое SRCINDEX будет в неё объединено.

Параметр `--rotate` обязателен, если DSTINDEX уже обслуживается `searchd`.

Типичная практика — объединять небольшой обновлённый набор из SRCINDEX в DSTINDEX. При объединении атрибутов значения из SRCINDEX имеют приоритет, если встречаются одинаковые идентификаторы документов. Однако обратите внимание, что "старые" ключевые слова **не** будут автоматически удалены в таких случаях. Например, если в DSTINDEX для документа 123 есть ключевое слово "old", а в SRCINDEX для него есть ключевое слово "new", после объединения документ 123 будет найден по обоим ключевым словам. Чтобы исправить это, можно явно указать условие для удаления документов из DSTINDEX; соответствующий параметр — `--merge-dst-range`:

```bash
sudo -u manticore indexer --merge main delta --merge-dst-range deleted 0 0
```

Этот параметр позволяет применять фильтры к целевой таблице вместе с объединением. Фильтров может быть несколько; для включения документа в итоговую объединённую таблицу должны быть выполнены все условия. В приведённом выше примере фильтр пропускает только те записи, где 'deleted' равен 0, исключая все записи, помеченные как удалённые.

`--drop-src` включает удаление SRCINDEX после объединения и до поворота таблиц, что важно, если вы указываете DSTINDEX в `killlist_target` DSTINDEX. Иначе при повороте таблиц документы, объединённые в DSTINDEX, могут быть подавлены SRCINDEX.
<!-- proofread -->

