Таблица DynamoDB -> CloudSearch == Поле "l" не существует в конфигурации домена - PullRequest
0 голосов
/ 06 февраля 2020

Сводка

У меня есть таблица DynamoDB, содержащая менее десяти элементов, которые я пытаюсь проиндексировать с помощью CloudSearch. Индексатор CloudSearch предлагает несуществующий атрибут с именем "l". Похоже, это происходит из-за ключа «list» DynamoDB JSON (который хранит массив объектов списка, в моем случае все строки). Несмотря на это, даже если я удалю этот ключ во время настройки поля индекса, я все равно получу следующую серьезную ошибку во время загрузки документа:

{["Field "l" does not exist in domain configuration (near operation with index 3; document_id null)",""add" operation must contain at least one "field" (near operation with index 5; document_id null)",""add" operation must contain at least one "field" (near operation with index 7; document_id null)","Field "l" does not exist in domain configuration (near operation with index 11; document_id null)",""add" operation must contain at least one "field" (near operation with index 13; document_id null)",""add" operation must contain at least one "field" (near operation with index 15; document_id null)","Field "l" does not exist in domain configuration (near operation with index 19; document_id null)",""add" operation must contain at least one "field" (near operation with index 21; document_id null)",""add" operation must contain at least one "field" (near operation with index 23; document_id null)","Field "l" does not exist in domain configuration (near operation with index 27; document_id null)",""add" operation must contain at least one "field" (near operation with index 29; document_id null)",""add" operation must contain at least one "field" (near operation with index 31; document_id null)","Field "l" does not exist in domain configuration (near operation with index 35; document_id null)",""add" operation must contain at least one "field" (near operation with index 37; document_id null)",""add" operation must contain at least one "field" (near operation with index 39; document_id null)"] }

Сведения

Здравствуйте! У меня есть таблица DynamoDB, содержащая менее десяти элементов, которые имеют ~ 35 атрибутов различного типа (строки, числа, списки строк и карты). Я пытаюсь проиндексировать эту таблицу с помощью CloudSearch через консоль aws gui. Когда я перехожу на страницу конфигурации индексного поля, большинство моих атрибутов отображаются, особенно отсутствуют списки. Однако индексатор предлагает "l" согласно следующему изображению:

enter image description here

Я предполагаю, что это список ключей DynamoDB JSON. Я попытался сохранить и удалить это предложение, а также перейти к созданию поискового домена. В любом случае, через десять минут, когда я пытаюсь загрузить документы, я получаю вышеуказанную ошибку.

Я обнаружил, что удаление всех списков из моих элементов таблицы приводит к этому предложению "l" исчезновение и возможная загрузка документа продолжаются, как и ожидалось.

Элементы таблицы DynamoDB создаются через API (используя интерфейс boto3 DynamoDB "Table" согласно следующему:

body = {}
# body is populated as a regular python dict
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table("table_name")
table.put_item(Item = body, ConditionExpression = 'attribute_not_exists(ds_name)')

I Подумав, возможно, здесь есть крайний случай, и я должен использовать более явный клиентский интерфейс boto3 DynamoDB для создания элементов, но использование описанного выше метода работает без ошибок, и элемент выглядит полностью правильным и нормальным в средстве просмотра DynamoDB gui (как в древовидном, так и в текстовом режиме), а также из вызова API ".get_item()".

Возможно, связано: Amazon CloudSearch создает нулевой идентификатор из DynamoDB

1 Ответ

0 голосов
/ 07 февраля 2020

Получен ответ от поддержки AWS - на момент написания этой статьи типы list и map не поддерживаются CloudSearch. Есть открытый запрос на добавление их, но «нет ETA, когда они будут поддерживаться». Предлагаемая альтернатива - использовать String Set вместо списка строк, которые должны работать для моего варианта использования.

...