solr - 如何在 Solr 中存储嵌套的关系数据
问题描述
我正在尝试将数据存储在 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 部分更新(原子更新)许多感觉效率不高的文档。重新索引索引不是首选解决方案,因为这是一个多租户应用程序。
我尝试将关系数据放在单独的索引中,然后join
在 Solr 中使用,但这不会复制最终结果中的连接索引字段,这意味着不可能对所有字段进行全文搜索。
{!join from=inner_id to=outer_id}field:value
我正在尝试以一种方式配置 Solr,即在更新父记录时,它只需要一次原子更新,但仍保留搜索所有字段的能力。这可能吗?
解决方案
除非您看到性能问题,否则您的初始实现似乎是正确的。特别是如果您要返回子网并且可能同时搜索子网和父值。
在幕后进行原子更新实际上会重新索引文档(并创建一个 Lucene 级别的新文档)。它还要求存储所有字段以允许重新创建文档。并且连接降低了您可以拥有的评分灵活性。
您可以做的一项优化是不存储父字段,但仅保留它们的索引。这将更节省空间并减少磁盘/记录再水合工作。但是,您无法将这些字段返回给用户,而必须从原始源中获取它们。
推荐阅读
- amazon-web-services - 我不完全理解容器化如何不会导致从一开始就过度配置实例
- php - Twilio whatsapp api电话号码的问题
- discord - 检查特定用户是否对 discord.py 做出反应
- javascript - 排序和合并对象列表
- angular - 如何定制
颜色? - bash - 使用 Cloud Build 重启 GCE 实例上的服务
- python - 彩票循环通过列表中的随机数找到找到它需要多少计数
- asp.net - 我如何将链接按钮 oncommand 事件挂钩到另一种方法,比如 gridview OnPageIndexChanging 事件
- javascript - 有没有比异步函数回调更简单的方法来暂停执行?
- html - Angular 中反应式表单的验证器指令