Нечувствительный к регистру запрос в DB динамо

Я хочу сканировать/запрашивать таблицу DB динамомашины. DB Dynamo чувствительна к регистру. Я хочу использовать клавиши Hash/Range иногда как строки. Можно ли каким-либо образом разрешить нечувствительность к регистру на уровне DB динамомашины? Или существуют ли какие-либо другие решения? Я спрашиваю Dynamo с JAVA SDK

Ответ 1

Есть два возможных способа, которыми я могу думать

1) Решите на конец приложения, настроив схему

Например, скажите, что теперь у вас есть "Имя" в качестве хеш-ключа, когда новые пользователи добавляются, добавляя их после создания их имени в нижнем регистре

John --> john

Doe --> doe

Не забудьте сохранить как значение (name как хэш для поиска), так и (displayName для отображения цели)

Теперь перед запросом базы данных вы можете преобразовать поиск в нижний регистр.

2) Использование ElasticSearch: Таблица DyanmoDB может быть интегрирована с ElasticSearch, которая может выполнять различные операции поиска в вашей таблице (ссылаться на ссылку)

Ответ 2

Как уже упоминалось в других ответах, ElasticSearch кажется хорошим вариантом. Однако, когда я столкнулся с подобной ситуацией, я решил ее именно так.

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

например. Если у меня есть пункт следующим образом:

id: 1
username: 'fsmith'
first_name: 'Franco'
last_name: 'Smith'

Теперь для поиска, когда я сохраняю элемент, я сохраняю его с вновь созданным атрибутом 'search_term' следующим образом:

id:1
username: 'fsmith'
first_name: 'Franco'
last_name: 'Smith'
search_term: 'franco_smith_fsmith'

Теперь, если мне нужно найти пользователя с именем Franco Smith, я просто сделаю запрос и использую FilterExpression as (код в boto3 и python):

FilterExpression = Attr('search_term').contains('franco') and Attr('search_term').contains('smith')

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