【问题标题】:CouchDB searching linked documentsCouchDB 搜索链接文档
【发布时间】:2022-01-13 13:05:48
【问题描述】:

我是 couchdb 的新手,我希望有人可以帮助我解决这个问题。

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

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

然后我有一个包含许多键的个人文档,关键是 firstName 和 lastName:

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

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

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

【问题讨论】:

    标签: couchdb couchdb-lucene


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多