【问题标题】:How to store nested relational data in Solr如何在 Solr 中存储嵌套的关系数据
【发布时间】:2023-04-05 02:41:01
【问题描述】:

我正在尝试在 Solr 中存储数据,以便最好地维护索引。我遇到的问题是我的数据结构是严重嵌套的。示例:

Company
  (to many) Person
    (to many) Property
      (to many) Network
        (to many) SubNetwork

我正在尝试为每个 SubNetwork 创建一个全文搜索索引,该索引将在其旁边显示当前父字段。

目前我的数据已完全非规范化,例如:

{
    "company": "Coca-Cola",
    "property": "1 plaza hotel",
    "network": "ABC",
    "subNetwork": "123"
}

现在,如果用户现在(处于非规范化状态)进入应用程序并更改公司名称,这将需要 Solr 部分更新(原子更新)许多感觉效率不高的文档.重新索引索引不是首选解决方案,因为这是一个多租户应用程序。

我尝试将关系数据放在单独的索引中,然后在 Solr 中使用join,但这不会复制最终结果中的连接索引字段,这意味着不可能对所有字段进行全文搜索。

{!join from=inner_id to=outer_id}field:value

我正在尝试以一种方式配置 Solr,即当父记录更新时,它只需要一次原子更新,但仍保留搜索所有字段的能力。这可能吗?

【问题讨论】:

    标签: solr


    【解决方案1】:

    除非您看到性能问题,否则您的初始实现似乎是正确的。特别是如果您要返回子网并且可能同时搜索子网和父值。

    在幕后进行原子更新实际上会重新索引文档(并创建一个 Lucene 级别的新文档)。它还要求存储所有字段以允许重新创建文档。并且连接会降低您可以拥有的评分灵活性。

    您可以做的一个优化是不存储父字段,但只保留它们的索引。这将更节省空间并减少磁盘/记录再水合工作。但是您无法将这些字段返回给用户,而必须从原始来源获取它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      相关资源
      最近更新 更多