簡體   English   中英

如何對AWS CloudSearch文檔的關系數據進行非規范化?

[英]How do I denormalize my relational data for AWS CloudSearch documents?

AWS CloudSearch希望您將其平整的數據文檔發送給他們,以進行索引以進行搜索,如下所示:

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

假設我有一個帶有accounts表和addresses表的數據庫。

每個account有很多addresses addresses表具有以下字段:

  • 地址1
  • 地址2
  • 壓縮
  • account_id(參考字段)

如何在CloudSearch文檔結構中對地址進行非規范化,以便可以在帳戶和地址中的所有列中進行搜索?

還是應該為每個表創建一個單獨的搜索域?

我假設您的用例是:

  • 通過他們的account_id檢索地址
  • 通過地址檢索account_ids
  • 在特定城市/州/郵編中查找帳戶

我建議以下兩件事:

  • 將每個地址索引為一個單獨的文檔

    我會將每個地址索引為一個單獨的文檔。 每個地址都有一個單獨的文檔,將使您能夠保持不同字段之間的關系(如果每個帳戶都有多個城市和多個州,則可能會丟失該關系)。

  • 分別索引每個字段

    我會分別索引每個字段(城市,州等)。 突破每個字段將使您能夠獨立搜索它們(例如,獲取俄亥俄州克利夫蘭的所有地址),將它們用作構面,基於它們提高分數等。

這是我建議的架構中一些文檔的示例:

[
 {"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
  }
 }
]

產生文件編號:

請注意,您需要一些非隨機方式來構造唯一的document_id(每個帳戶+地址唯一,而不僅僅是每個帳戶唯一)。 諸如account_id加上地址,城市,州,郵編的哈希值等都可以使用,或者您可以在表中添加另一列以唯一地標識它們(我更喜歡后者)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM