当前位置: 首页 > 知识库问答 >
问题:

如何对AWS CloudSearch文档的关系数据进行非规范化?

谢烨烨
2023-03-14

AWS CloudSearch希望您将您的数据的扁平文档发送到索引以进行搜索,该索引类似于:

[
 {"type": "add",
  "id":   "123456",
  "fields": {
     "account_id": "123456",
     "name": "foo",
     "addresses": []
  }
 }
]

假设我有一个数据库,其中有一个账户表和一个地址表。

每个账户都有许多地址地址表包含以下字段:

  • 地址_1
  • 地址_2
  • 城市
  • zip
  • 账户id(参考字段)

如何在CloudSearch文档结构中对地址进行非规范化,以便在accounts和addresses中的所有列中进行搜索?

或者我应该为每个表创建一个单独的搜索域?


共有1个答案

陈允晨
2023-03-14

我假设您的用例是:

  • 通过account_id检索地址
  • 通过地址检索account_ids
  • 查找特定城市/州/zip的帐户

我推荐以下两件事:

>

  • 将每个地址作为单独的文档索引

    我会将每个地址作为单独的文件编制索引。每个地址都有一个单独的文档,这将使您能够保持不同字段之间的关系(如果每个帐户都有一个城市数组和一个州数组,则会丢失这些字段)。

    分别索引每个字段

    我会分别为每个字段(城市、州等)编制索引。打破每个字段将使你能够独立搜索它们(例如获得克利夫兰的所有地址,哦),将它们用作方面,根据它们提高分数,等等。

    以下是我提出的模式中的一些文档的示例:

    [
     {"type": "add",
      "id":   "<see below>",
      "fields": {
         "account_id": "123456",
         "name": "John Smith",
         "address_1": "1 Main St",
         "address_2": "Apt 1",
         "city": "Davenport",
         "state": IA,
         "zip": 52081
      }
     },
     {"type": "add",
      "id":   "<see below>",
      "fields": {
         "account_id": "123456",
         "name": "John Smith",
         "address_1": "2 Elm St",
         "city": "Lincoln",
         "state": NE,
         "zip": 23452
      }
     }
    ]
    

    生成文档ID:

    请注意,您需要一些非随机的方法来构造唯一的文档ID(每个帐户地址都是唯一的,而不仅仅是每个帐户)。类似于account_id加上地址、城市、州、邮政编码的散列就可以了,或者您可以向表中添加另一列来唯一标识它们(我更喜欢后者)。

  •  类似资料:
    • 我在Spring Data JPA中有两个实体: 目标是获取与user\u id相关的所有税款: User.java 税务ayment.jva 我不想要一个太多的注释从User.java和列映射在纳税user_id。 规格等级如下: 根据我获取所有与user\u id相关的税款的目标,规范是正确的还是错误的?

    • 问题内容: 好的,我刚开始使用Firebase。我已阅读:https://www.firebase.com/docs/data- structure.html, 并且已阅读:https://www.firebase.com/blog/2013-04-12-denormalizing- is- normal.html 所以我很困惑,因为一个似乎与另一个矛盾。您可以按层次结构组织数据,但是如果您想使其

    • 目录结构 软件手册是一部完整的书,建议采用下面的目录结构。 简介(Introduction): [必备] [文件] 提供对产品和文档本身的总体的、扼要的说明 快速上手(Getting Started):[可选] [文件] 如何最快速地使用产品 入门篇(Basics): [必备] [目录] 又称”使用篇“,提供初级的使用教程 环境准备(Prerequisite):[必备] [文件] 软件使用需要满足

    • 我阅读了cassandra数据建模,除了非规范化数据可能会发生变化之外,一切都很清楚。我如何同步它?当用户电子邮件更改时,更新的方法是什么: < code>groupname是组的一部分,数据模型中的用户可能不知道任何组,因此在用户更改后无法更新电子邮件。 下面描述的解决方案是否合适? 向用户模型中添加一列(类型

    • 问题内容: 我已经阅读了有关“ 构建数据”的Firebase文档。数据存储很便宜,但用户的时间却不便宜。我们应该针对get操作进行优化,并在多个地方编写。 因此,我可能会存储一个 列表 节点和一个 列表索引 节点,两者之间有一些重复的数据,至少是列表名称。 我正在使用ES6,并在我的javascript应用程序中承诺处理异步流,主要是在第一次数据推送后从firebase中获取ref键。 知道我的应

    • 问题内容: 用例说明 我们有一个关系数据库,其中包含有关我们日常运营的数据。目的是允许用户使用全文本搜索引擎来搜索重要数据。数据经过规范化,因此不是进行全文查询的最佳形式,因此,其想法是对数据的一部分进行规范化,然后将其实时复制到Elasticsearch,这使我们能够创建快速而准确的搜索应用程序。 我们已经有了一个启用数据库操作(插入,更新,删除)事件搜索的系统。这些事件仅包含已更改的列和主键(