0

我对 couchdb 很陌生,我希望有人可以帮助我解决这个问题。

假设我有一个包含各种键的地址文档,但重要的是一个 singleLineAddress 和一个 people 数组:

{
  "_id": "002cb726bfe69a79ed9b897931000ec6",
  "_rev": "2-6af6d8896703e9db6f5ba97abb1ca5d7",
  "type": "address",
  ...
  "singleLineAddress": "28 CLEVEDON ROAD, WESTON-SUPER-MARE, BS23 1DG",
  ...
  "persons":["d506d09a1c46e32f6632e6d99a0062bd","002cb726bfe69a79ed9b897931001c80"]
}

然后我有一个带有许多键的个人文档,关键是名字和姓氏:

{
    "_id": "d506d09a1c46e32f6632e6d99a0062bd",
    "_rev": "4-98fae966a92d5c6c359cb8ddfaa487e1",
    "type": "person",
    ...
    "firstName": "Joe",
    "lastName": "Bloggs"
    ...
}

我知道我可以创建一个链接文档视图并发出所有链接到地址的人员 ID,然后我可以使用 include_docs=true 查看所有人员数据。但是,从我正在阅读的内容来看,不建议使用 include_docs=true ,因为它可能很昂贵。

最终,我想使用 couchdb-lucene 使用名称和地址对 person@address 运行 FTS。甚至可以使用链接文档吗?

4

1 回答 1

0

使用?include_docs=true比不使用昂贵 - 对于返回的每一行索引,数据库必须获取相关的文档正文。但有时需要:) 您可以?include_docs=true通过将更多数据“投影”到在查询时返回给您的索引中来避免使用。见https://blog.cloudant.com/2021/11/12/Projection.html

至于 Lucene 全文搜索,您当然可以在同一集合中跨文档类​​型进行搜索,但您的搜索结果将包含文档的混合address-people全文搜索无法在地址与其居住者之间进行“连接” -你以后必须自己做。

如果您迫切需要将地址和人员对象一起返回,请考虑将两者结合起来:您的地址文档将包含一组人员对象?在组合对象之间进行权衡,以便将属于一起的数据存储在一起,并保持每个微对象分开以便于更新。

于 2021-12-22T09:48:30.187 回答