我正在尝试在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,即在更新父记录时,它只需要一次原子更新,但仍然保留了在所有字段上搜索的能力。这可能吗?
答案 0 :(得分:0)
除非您看到性能问题,否则您的初始实现似乎是正确的。特别是如果您要返回子网,并且可能同时在子网和父值上进行搜索。
在后台进行原子更新实际上无论如何都会为文档重新编制索引(并创建Lucene级的新文档)。它还要求存储所有字段以允许重新创建文档。而且联接降低了您拥有的计分灵活性。
您可以做的一种优化是不存储父字段,而只保留它们的索引。这将更节省空间,并减少磁盘/记录的重新水化工作。但是,您不能将这些字段返回给用户,而必须从原始来源获取它们。