As mentioned in other answers, ElasticSearch seems to be a good option. However, when I came across a similar situation, I decided it that way.
I created a new attribute just for search. I saved the values ββfor the lowercase search in this attribute and searched by completing the query using the "CONTAINS" operator.
eg. If I have an item as follows:
id: 1 username: 'fsmith' first_name: 'Franco' last_name: 'Smith'
Now for the search, when I save the item, I save it with the newly created attribute 'search_term' as follows:
id:1 username: 'fsmith' first_name: 'Franco' last_name: 'Smith' search_term: 'franco_smith_fsmith'
Now, if I need to find a user named Franco Smith, I just make a request and use FilterExpression as (code in boto3 and python):
FilterExpression = Attr('search_term').contains('franco') and Attr('search_term').contains('smith')
However, this solution may not be very effective depending on your use case or scenario, since it uses requests, and you will be charged in accordance with the read items in accordance with the condition of the sort key.
Harish nair
source share