java—查询dynamodb表中包含特定字符串的表

uqjltbpv  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(404)

所以,我有一个scanexpression,它根据传入的查询返回博客列表。
例如,当我传入查询字符串“java”时,它将返回blog“starting out with java”。
但是,如果传递查询字符串“javatutorials”,则不会返回任何内容。所以基本上,我希望博客是包含“java”或“tutorial”的返回。

public List<BlogDetailsEntity> searchBlogs(String query) {
    try {
      DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
      scanExpression.addFilterCondition("title", new Condition()
              .withComparisonOperator(ComparisonOperator.CONTAINS)
              .withAttributeValueList(new AttributeValue().withS(query.toLowerCase())));
      return dynamoDBMapper.scan(BlogDetailsEntity.class, scanExpression);
    } catch (Exception ex) {
      log.error("failed to get blogs > " + query);
    }
    return null;
  }
epggiuax

epggiuax1#

要查询dynamodb数据,您应该了解如何使用awsdkforjavav2api和增强的客户机。您的代码是旧版本1,amazonsdk团队推荐使用v2。
AWSSDKforJava2.x是对1.x版代码库的主要重写。它构建在Java8+之上,并添加了几个经常请求的特性。其中包括对非阻塞i/o的支持,以及在运行时插入不同http实现的能力。
有关增强型客户端的更多信息,请参见:
dynamodb表中的Map项
使用增强的客户机,可以使用表达式对象来获取所需的结果集。要查看使用v2和增强型客户机检索数据的不同方法,请参阅以下代码示例。
https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/dynamodb/src/main/java/com/example/dynamodb/enhancedscanrecordswithexpression.java
如果您不熟悉aws java v2 api,请参阅《java v2开发人员指南》中的此文档主题:
开始使用AWSSDKforJava2.x
使用dynamodb2api,您可以执行您的用例。给这张table。

我可以使用以下java代码调出标题中“问题”一词的记录:

AttributeValue attVal = AttributeValue.builder()
        .s("issue")
        .build();

Map<String, AttributeValue> myMap = new HashMap<>();
           myMap.put(":val1", attVal);

Map<String, String> myExMap = new HashMap<>();
        myExMap.put("#title", "title");

Expression expression = Expression.builder()
         .expressionValues(myMap)
         .expressionNames(myExMap)
         .expression("contains(#title, :val1)")
         .build();

   ScanEnhancedRequest enhancedRequest = ScanEnhancedRequest.builder()
         .filterExpression(expression)
         .limit(15)
         .build();

   // Get items in the Issues table.
   Iterator<Issues> results = table.scan(enhancedRequest).items().iterator();
   while (results.hasNext()) {
            Issues issue = results.next();
            System.out.println("The record description is " + issue.getDescription());
            System.out.println("The record title is " + issue.getTitle());
     }

还有-我注意到你在Spring Boot上贴了标签。要了解如何编写使用dynamodb api v2的spring boot web应用程序,请参阅:
创建dynamodbweb应用程序项跟踪器

相关问题