# Функция kill-list в Manticore Search

Текстовые данные обычных индексов неизменяемы, что означает, что для обновления данных нам необходимо выполнить полную переиндексацию. Во многих случаях переиндексация может занимать длительное время. Для этого используется [main+delta schema](https://docs.manticoresearch.com/latest/html/indexing/delta_index_updates.html).

Концепция предполагает большой индекс, содержащий снимок данных на определённый момент, и более мелкий индекс, который хранит изменения (дельту) с момента снимка до более текущей даты. Поскольку второй меньше, его можно переиндексировать чаще. Изменения дельты могут быть новыми записями, обновлёнными или удалёнными записями. Обновлённые или удалённые записи создают проблему: когда движок ищет в обоих индексах, он не знает, что запись в основном индексе уже не актуальна. Это приводит к тому, что продолжают отображаться записи, которые фактически удалены, или (в случае обновлённых записей) включаются старые версии записей вместо более новых из дельта‑индекса.

Для решения этой проблемы была введена функция [kill-list](https://docs.manticoresearch.com/latest/html/conf_options_reference/data_source_configuration_options.html#sql-query-killlist). Kill-list определяет список идентификаторов документов в дельта‑индексе, который сообщает движку, что эти записи следует игнорировать в предыдущих индексах.

```ini
sql_query_killlist = \
    SELECT id FROM documents WHERE updated_ts>=@last_reindex UNION \
    SELECT id FROM documents_deleted WHERE deleted_ts>=@last_reindex
```

В этом примере мы включаем в kill-list идентификаторы документов, обновлённые после @last\_reindex, даты последней полной переиндексации, а также идентификаторы удалённых документов. Таблица documents\_deleted может заполняться вручную при удалении записи из documents или может использоваться триггер.

Важно помнить, что в kill-list удаления применяются к предшествующим индексам в том порядке, в котором они объявлены.

Если вы выполняете последовательный поиск по индексам, дельта должна идти **после** основного индекса.


```sql
mysql> SELECT * FROM main,delta WHERE MATCH('...');
```

То же самое применимо, если мы используем несколько дельт (например *delta\_daily, delta\_hourly*): последовательность должна быть *main,delta_daily,delta\_hourly*, а не *main,delta\_hourly,delta\_daily*.

Kill-list также используется в локальных распределённых индексах, и порядок определения индексов имеет значение и в этом случае, даже если мы выполняем параллельную обработку (используя [dist\_threads](https://docs.manticoresearch.com/latest/html/conf_options_reference/searchd_program_configuration_options.html#dist-threads) > 0) локальных индексов:


```ini
  index dist
  {
     local = main
     local = delta
  }
```
