web-dev-qa-db-fra.com

Requête DynamoDB avec condition insensible à la casse

Nous stockons les noms d'organisations dans une table DynamoDB sur AWS et souhaitons conserver la capitalisation officielle de ces noms d'entreprise, par exemple dans "TNT" et "FedEx".

Notre cas d'utilisation est que les utilisateurs de l'application peuvent rechercher des organisations par leur nom, mais nous aimerions que leurs requêtes soient interprétées sans distinction de casse. Ainsi, les requêtes pour "FedEx", "Fedex" ou "fedex" doivent toutes renvoyer l'élément correct de la table.

Les autres bases de données disposent de moyens pour exécuter des requêtes en ignorant la casse (par exemple, à l'aide de la clé ILIKE Word dans PostgreSQL), en exprimant des requêtes via des expressions régulières ou en appliquant des fonctions dans la condition (par exemple, la fonction LOWER()).

Comment cela peut-il être fait dans DynamoDB? La documentation sur la requête de Amazon DynamoDB ne fournit pas de réponse.

(La meilleure solution semble consister à stocker le nom deux fois: une fois avec la capitalisation officielle en vigueur et une fois dans un autre champ avec le nom converti en minuscule. La recherche doit alors être effectuée sur ce dernier champ, avec le terme de recherche de requête également. Oui, je sais que cela ajoute de la redondance à la table. C'est une solution de contournement, pas une solution optimale.)

7

oui, exactement, lorsque vous ajoutez le nouvel élément/la nouvelle ligne, ajoutez également un nouveau champ searchName, c’est la minuscule (voire plus, peut-être uniquement des lettres/chiffres/espaces) du champ votre nom. puis recherchez par ce champ searchName

10
UXDart

L'écriture de données en double dans dynamodb n'est pas une bonne conception. La meilleure solution serait d’ajouter «recherche élastique» à dynamodb. Vous pouvez connecter ce composant directement à l'aide de la console aws. Utilisez ensuite l'analyse personnalisée en recherche élastique pour obtenir des données non sensibles à la casse. 

3
Srini Sydney