PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-如何在DynamoDB列表中扫描文本?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

在DynamoDB中,我有一个具有以下结构的表.
动作“字段”包含所有信息(这是我想搜索的字段),而orderId是主键

{
  "actions": [
    {
      "actionDescription": "8f23029def1d6baa4",
      "actiontitle": "UNDEFINED_ACTION",
      "timestamp": 1533730680,
      "user": {
        "fullName": "XXXXX",
        "userName": "xxxxx@xxxx.xxx",
      }
    },
    {
      "actionDescription": "21857e61037bc29ec",
      "actiontitle": "UNDEFINED_ACTION",
      "timestamp": 1533731788,
      "user": {
        "fullName": "XXXXX",
        "userName": "xxxxx@xxxx.xxx",
      }
    },
    {
      "actionDescription": "cf10abd44e24cef56",
      "actiontitle": "UNDEFINED_ACTION",
      "timestamp": 1533731788,
      "user": {
        "fullName": "XXXXX",
        "userName": "xxxxx@xxxx.xxx",
      }
    },
    {
      "actionDescription": "7787fe7a5bf4d22de",
      "actiontitle": "UNDEFINED_ACTION",
      "timestamp": 1533731789,
      "user": {
        "fullName": "OOOOOO",
        "userName": "ooooo@oooo.ooo",
      }
    },
    {
      "actionDescription": "9528c439021f504bf",
      "actiontitle": "UNDEFINED_ACTION",
      "timestamp": 1533731789,
      "user": {
        "fullName": "XXXXX",
        "userName": "xxxxx@xxxx.xxx",
      }
    },
    {
      "actionDescription": "bfba100e0e54934b2",
      "actiontitle": "UNDEFINED_ACTION",
      "timestamp": 1533731789,
      "user": {
        "fullName": "XXXXX",
        "userName": "xxxxx@xxxx.xxx",
      }
    },
    {
      "actionDescription": "f789dc12f1dbe3be2",
      "actiontitle": "UNDEFINED_ACTION",
      "timestamp": 1533731789,
      "user": {
        "fullName": "OOOOOO",
        "userName": "ooooo@oooo.ooo",
      }
    },
    {
      "actionDescription": "4cd6b68dfea7cf8ee",
      "actiontitle": "UNDEFINED_ACTION",
      "timestamp": 1533731789,
      "user": {
        "fullName": "XXXXX",
        "userName": "xxxxx@xxxx.xxx",
      }
    },
    {
      "actionDescription": "1e3a0e95f8e5106d7",
      "actiontitle": "UNDEFINED_ACTION",
      "timestamp": 1533731790,
      "user": {
        "fullName": "OOOOOO",
        "userName": "ooooo@oooo.ooo",
      }
    }
  ],
  "orderId": "13aae31"
}

我想做的是使PHP中的扫描项能够通过userName进行搜索.或按操作数组内的任何字段(时间戳,actiontitle等).
波纹管是我尝试使用的许多术语之一,但我无法获得任何结果

$params = [
 'Tablename'                 => $this->tablename,
 'FilterExpression'          => "userName = :searchTerm",
 'ExpressionAttributeValues' => [
     ':searchTerm' => 'ooooo@oooo.ooo',
  ],
 'ReturnConsumedCapacity'    => '@R_947_10586@L',
];
$results = $this->dynamoDbClient->scan($params);

您能告诉我我想念的东西吗?
另外,请注意:我不想获取特定的orderId,我想获取所有包含searchTerm的orderId(在这种情况下为userName)

解决方法:

使用此项目模式的最佳选择是自己过滤表项目.也就是说,不使用过滤器表达式扫描表,然后编写自己的代码以过滤结果.不使用过滤器表达式的扫描将消耗相同数量的读取容量单位.

您可以将过滤器表达式设置为类似的内容,但这是不可扩展的,并且仅在操作列表中有固定数量的项目时才有效.

  actions[0].user.userName == :searchTerm OR actions[1].user.userName == :searchTerm OR actions[2].user.userName == :searchTerm OR ....

如果您需要复杂的搜索@L_801_15@,最好使用专用的搜索数据库. AWS为此提供了两项服务,即AWS CloudSearch和AWS ElasticSearch.您可以使用DynamoDB流来使搜索索引保持最新.

如果您打算使用过滤器扫描DynamoDB表,则可以重构结构以在一个集合(或串联字符串)中包含具有所有可搜索信息的其他@L_675_21@.

{
  "actions": [....],
  "actionsDescriptions": Set["8f23029def1d6baa4", "21857e61037bc29ec", "cf10abd44e24cef56", "7787fe7a5bf4d22de", "9528c439021f504bf", "bfba100e0e54934b2", "f789dc12f1dbe3be2", "4cd6b68dfea7cf8ee", "1e3a0e95f8e5106d7"],
  "actiontitles": Set["UNDEFINED_ACTION"],
  "timestamps": Set[1533730680, 1533731788, 1533731789, 1533731790],
  "user_fullNames": Set["XXXXX"],
  "user_userNames": Set["ooooo@oooo.ooo", "xxxxx@xxxx.xxx"],
  "orderId": "13aae31"
}

注意,您必须使用Set(或将所有值连接到字符串中),因为contains函数仅适用于字符串和Set.

然后您可以使用这样的过滤器表达式

contains(user_userNames, :searchTerm)

大佬总结

以上是大佬教程为你收集整理的php-如何在DynamoDB列表中扫描文本?全部内容,希望文章能够帮你解决php-如何在DynamoDB列表中扫描文本?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: