Я хочу сканировать/запрашивать таблицу DB динамомашины. DB Dynamo чувствительна к регистру. Я хочу использовать клавиши Hash/Range иногда как строки. Можно ли каким-либо образом разрешить нечувствительность к регистру на уровне DB динамомашины? Или существуют ли какие-либо другие решения? Я спрашиваю Dynamo с JAVA SDK
Нечувствительный к регистру запрос в DB динамо
Ответ 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')
Однако это решение может быть не очень эффективным в зависимости от вашего варианта использования или сценария, поскольку оно использует запросы, и с вас будет взиматься плата в соответствии с прочитанными элементами в соответствии с условием ключа сортировки.