---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://yandex.ru/dev/direct/doc/en/keywordsresearch/deduplicate.md
  - https://yandex.ru/dev/direct/doc/ru/keywordsresearch/deduplicate.md
sourcePath: ru/ref-v5/keywordsresearch/deduplicate.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/dev/direct/doc/ru/llms.txt

# deduplicate

Выполняет предварительную обработку массива ключевых фраз.

Метод выполняет следующие операции с ключевыми фразами:

**Склейка дублей**
 
Объединение нескольких фраз, отличающихся только минус-словами, формой слов, наличием стоп-слов. Объединенная фраза будет содержать минус-слова всех фраз. Например, фразы _заказ окон -жалюзи_ и _окна на заказ -дешево_ будут заменены фразой _окна на заказ -дешево -жалюзи_. В частности, при склейке удаляются дубликаты фраз.

**Кросс-минусовка**
 
Добавление минус-слова в случае, когда фраза содержится в другой фразе, отличающейся на одно слово. Например, в паре фраз _шуба_ и _шуба норковая_ к первой фразе будет добавлено минус-слово и получится фраза _шуба -норковая_. В результате поисковому запросу _норковая шуба_ будет соответствовать только одна из фраз, а не обе.

Метод принимает на вход массив, который может содержать:

- новые ключевые фразы без идентификатора;
- существующие ключевые фразы, имеющие идентификатор в Директе или внешней базе данных.

В результате склейки дублей и кросс-минусовки метод возвращает инструкции, какие фразы нужно добавить, изменить или удалить. Формат ответа максимально приближен к формату запроса для методов [add](https://yandex.ru/dev/direct/doc/ru/keywords/add.md), [update](https://yandex.ru/dev/direct/doc/ru/keywords/update.md) и [delete](https://yandex.ru/dev/direct/doc/ru/keywords/delete.md) сервиса [Keywords](https://yandex.ru/dev/direct/doc/ru/keywords/keywords.md).

## Запрос {#input}

Структура запроса в формате JSON:

```javascript translate=no
{
  "method": "deduplicate",
  "params": { /* params */
    "Keywords": [ {  /* DeduplicateRequestItem */
      "Id": (long),
      "Keyword": (string), /* required */
      "Weight": (long)
    }, ... ], /* required */
    "Operation": [( MERGE_DUPLICATES | ELIMINATE_OVERLAPPING ), ... ]
  }
}
```

#|
||
**Параметр**
|
**Тип**
|
**Описание**
|
**Обязательный**
||

||
**Структура params (для JSON) / DeduplicateRequest (для SOAP)**
||
||
`Keywords`
|
array of DeduplicateRequestItem
|
Ключевые фразы, которые требуется предварительно обработать. Не более 400 000 элементов в массиве.
|
Да
||
||
`Operation`
|
array of DeduplicateOperationEnum
|
Операции, которые требуется выполнить над массивом ключевых фраз:
- MERGE_DUPLICATES — склейка дублей;
- ELIMINATE_OVERLAPPING — кросс-минусовка.

Если параметр не задан, будут выполнены обе операции.
|
Нет
||

||
**Структура DeduplicateRequestItem**
||
||
`Id`
|
long
|
Идентификатор ключевой фразы в Директе или внешней базе данных.
|
Нет
||
||
`Keyword`
|
string
|
Ключевая фраза. Может содержать минус-слова и операторы.

<!-- source: ru/_includes/keywords/add/id-input/keyword-len.md -->
Длина ключевой фразы — не более 4096 символов. Оператор `!` перед минус-словом не учитывается в длине фразы (последовательность `-!` считается как один символ).
<!-- endsource: ru/_includes/keywords/add/id-input/keyword-len.md -->


<!-- source: ru/_includes/keywords/add/id-input/keyword-len_1.md -->
Не более 7 слов в ключевой фразе, без учета стоп-слов и минус-слов. Каждое слово — не более 35 символов, без учета минуса перед минус-словом.
<!-- endsource: ru/_includes/keywords/add/id-input/keyword-len_1.md -->
|
Да
||
||
`Weight`
|
long
|
Вес ключевой фразы. Положительное число.

В случае склейки нескольких фраз будет оставлена или изменена фраза с наибольшим весом, остальные будут удалены.
|
Нет
||
|# 


## Ответ {#output}

Структура ответа в формате JSON:

```javascript translate=no
{
  "result": { /* result */
    "Add": [{ /* DeduplicateResponseAddItem */
      "Keyword": (string) /* required */
    }, ... ],
    "Update": [{ /* DeduplicateResponseUpdateItem */
      "Id": (long), /* required */
      "Keyword": (string) /* required */
    }, ... ],
    "Delete": { /* IdsCriteria */
      "Ids": [(long), ... ] /* required */
    },
    "Failure": [{ /* DeduplicateErrorItem */
      "Position": (long), /* required */
      "Warnings": [{  /* ExceptionNotification */
        "Code": (int), /* required */
        "Message": (string), /* required */
        "Details": (string)
      }, ... ],
      "Errors": [{  /* ExceptionNotification */
        "Code": (int), /* required */
        "Message": (string), /* required */
        "Details": (string)
      }, ... ]
    }, ... ]
  }
}
```

Ниже приведено описание параметров.


#|
||
**Параметр**
|
**Тип**
|
**Описание**
||

||
**Структура result (для JSON) / DeduplicateResponse (для SOAP)**
||
||
`Add`
|
array of DeduplicateResponseAddItem
|
Ключевые фразы, которые можно подать на вход метода [Keywords](https://yandex.ru/dev/direct/doc/ru/keywords/keywords.md).[add](https://yandex.ru/dev/direct/doc/ru/keywords/add.md).
||
||
`Update`
|
array of DeduplicateResponseUpdateItem
|
Ключевые фразы, которые можно подать на вход метода [Keywords](https://yandex.ru/dev/direct/doc/ru/keywords/keywords.md).[update](https://yandex.ru/dev/direct/doc/ru/keywords/update.md).
||
||
`Delete`
|
IdsCriteria
|
Ключевые фразы, которые можно подать на вход метода [Keywords](https://yandex.ru/dev/direct/doc/ru/keywords/keywords.md).[delete](https://yandex.ru/dev/direct/doc/ru/keywords/delete.md).
||
||
`Failure`
|
array of DeduplicateErrorItem
|
Ключевые фразы, при обработке которых произошла ошибка.
||

||
**Структура DeduplicateResponseAddItem**
||
||
`Keyword`
|
string
|
Ключевая фраза, которую требуется добавить.
||

||
**Структура DeduplicateResponseUpdateItem**
||
||
`Id`
|
long
|
Идентификатор ключевой фразы из запроса.
||
||
`Keyword`
|
string
|
Измененная ключевая фраза.
||

||
**Структура IdsCriteria**
||
||
`Ids`
|
array of long
|
Идентификаторы ключевых фраз, которые требуется удалить.
||

||
**Структура DeduplicateErrorItem**
||
||
`Position`
|
long
|
Порядковый номер ключевой фразы во входном массиве (начиная с 1).
||
||
`Warnings`
|
array of [ExceptionNotification](https://yandex.ru/dev/direct/doc/dg/best-practice/modify.html)
|
Предупреждения, возникшие при обработке ключевой фразы.
||
||
`Errors`
|
array of [ExceptionNotification](https://yandex.ru/dev/direct/doc/dg/best-practice/modify.html)
|
Ошибки, возникшие при обработке ключевой фразы.
||
|# 


## Пример {#samples}

**Запрос**

 
```javascript translate=no
    {
      "method": "deduplicate",
      "params": {
        "Keywords": [{
          "Keyword": "A B -C"
        },
        {
          "Id": 1000,
          "Keyword": "A B -D"
        },
        {
          "Id": 1001,
          "Keyword": "A B"
        },
        {
          "Keyword": "E F"
        }]
      }
    }
```

**Ответ**

 
Фразы _A B -C_, _A B -D_ и _A B_ склеиваются в объединенную фразу _A B -C -D_:

    - Фраза _A B -C_ новая. Ее не требуется добавлять, поскольку ее аналог уже есть в базе данных. В ответе она пропущена.
    - Фраза _A B -D_ есть в базе данных, ее нужно изменить на объединенную фразу. Идентификатор фразы и новое значение возвращены в структуре `Update`.
    - Фраза _A B_ есть в базе данных, ее нужно удалить. Идентификатор фразы возвращен в структуре `Delete`.

    Фраза _E F_ новая, ее нужно добавить. Она возвращена в структуре `Add`.

    ```javascript translate=no
    {
      "result": {
        "Add": [{
          "Keyword": "E F"
        }],
        "Update": [{
          "Id": 1000,
          "Keyword": "A B -C -D"
        }],
        "Delete": {
          "Ids": [ 1001 ]
        }
      }
    }
    ```

