AWS CloudSearch希望您将数据的扁平化文档发送到搜索索引,如下所示:
[
{"type": "add",
"id": "123456",
"fields": {
"account_id": "123456",
"name": "foo",
"addresses": []
}
}
]
假设我有一个带有accounts
表和addresses
表的数据库。
每个addresses
有许多account
。 addresses
表包含以下字段:
如何在CloudSearch文档结构中对地址进行反规范化,以便搜索帐户和地址中的所有列?
或者我应该为每个表创建一个单独的搜索域吗?
答案 0 :(得分:0)
我假设你的用例是:
我会推荐以下两件事:
将每个地址编入索引
我会将每个地址编入索引作为单独的文档。有一个单独的 每个地址的doc将使您能够保持关系 在不同的领域之间(如果你有一个数组,你会失去 城市和每个帐户的一系列州。)
分别为每个字段编制索引
我会分别为每个字段(城市,州等)编制索引。打破每个字段将使您能够独立搜索它们(例如,获取俄亥俄州克里夫兰市的所有地址),将它们用作方面,根据它们提高分数等。
以下是我提出的架构中的一些文档示例:
[
{"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:
请注意,您需要一些非随机方式来构建唯一的document_ids(每个帐户+地址唯一,而不仅仅是每个帐户)。像account_id加上地址,城市,州,邮政编码的哈希值可以使用,或者您可以在表格中添加另一列来唯一标识它们(我更喜欢后者)。